可以说有一个嵌套列表,例如:
my_list = [[1, 2, 21], [1, 3], [1, 2]]
在此函数min()
上调用时:
min(my_list)
收到的输出是
[1, 2]
为什么以及如何运作?它有哪些用例?
从字典上比较Python中的列表(和其他序列),而不是基于任何其他参数。
可以将序列对象与具有相同序列类型的其他对象进行比较。比较使用 字典
顺序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较下两个项目,依此类推,直到用尽任何一个序列。
从Wikipedia页面上的字典排序
词典顺序或词典顺序(也称为词典顺序,词典顺序,字母顺序或词典产品)是对单词字母顺序基于其组成字母的字母顺序的方式的概括。
该min
函数返回 iterable中
的最小值。因此,该词的词典价值[1,2]
最小。您可以使用[1,2,21]
>>> my_list=[[1,2,21],[1,3],[1,2]]
>>> min(my_list)
[1, 2]
min
?进行明智的选择my_list
,首先[1,2,21]
和[1,3]
。现在从文档
如果要比较的两个项目本身 是相同类型的序列 ,则按字典顺序进行 递归 比较。
因此的值[1,1,21]
是小于[1,3]
,由于第二元件[1,3]
,其为,3
是 按字典顺序较高
比的第二元素的值[1,1,21]
,这是,1
。
现在比较[1,2]
和[1,2,21]
,并从文档中添加另一个参考
如果一个序列是另一个序列的 初始子序列 ,则 较短的序列是较小的 (较小的) 序列 。
[1,2]
是的初始子序列[1,2,21]
。因此,的总价值[1,2]
要小于的价值[1,2,21]
。因此[1,2]
返回为输出。
这可以通过使用sorted
函数来验证
>>> sorted(my_list)
[[1, 2], [1, 2, 21], [1, 3]]
如果列表包含重复的min元素 ,则返回第一个
>>> my_list=[[1,2],[1,2]]
>>> min(my_list)
[1, 2]
可以使用id
函数调用来确认
>>> my_list=[[1,2],[1,2]]
>>> [id(i) for i in my_list]
[140297364849368, 140297364850160]
>>> id(min(my_list))
140297364849368
min
?如果所需的比较 不是字典式的,
则key
可以使用参数(如Padraic所述)
该min
函数还有一个名为的 附加可选参数key
。该key
参数具有一个函数。
可选的key参数指定一个用于的单参数排序函数
list.sort()
。如果提供了key参数,则必须采用关键字形式(例如min(a,b,c,key=func)
)。
例如,如果需要 按长度最小的元素,
则需要使用该len
函数。
>>> my_list=[[1,2,21],[1,3],[1,2]]
>>> min(my_list,key=len) # Notice the key argument
[1, 3]
如我们所见,第一个最短元素在这里返回。
直到Python2
如果列表是异类 类型的名称,
则考虑进行排序,请选中比较,
除数字外,其他类型的对象均按其 类型名称 排序 __
因此,如果您将anint
和a放在list
那里,您将获得整数值,该整数值的最小值i
小于l
。同样'1'
,这两者的价值都将更高。
>>> my_list=[[1,1,21],1,'1']
>>> min(my_list)
1
Python3及更高版本
但是,这种令人困惑的技术已在 Python3 中删除。 现在TypeError
_它 _引发一个 。阅读Python3.0的新增功能
排序比较操作符(
<
,<=
,>=
,>
)提出一个TypeError
例外,当操作数没有意义的自然顺序。因此,这样的表达式1 < ''
,0 > None
或者len <= len
不再有效,并且如None < None
加薪TypeError
,而不是返回False
。必然的结果是, 对异构列表进行排序不再有意义-所有元素必须彼此可比 。
>>> my_list=[[1,1,21],1,'1']
>>> min(my_list)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < list()
但是它适用于 Comparable类型 ,例如
>>> my_list=[1,2.0]
>>> min(my_list)
1
在这里我们可以看到list
包含float
值和int
值。但是作为float
和int
是可比较的类型,min
函数在这种情况下有效。
现在,我希望获得和值最小的属性,以及其他和值最大的列表。 我知道减少... 但是是否可以用最小的获得和最大的获得? 如何获得这些列表?
问题内容: 我有一个这样的清单: 如果仅使用该方法,它将返回答案,如果我试图找到max name ,那将是正确的,但是我试图返回其整数最大的元素。 问题答案: 之所以起作用,是因为 max 函数的 key 参数指定了一个函数,当 max 想要知道用于搜索最大元素的值时,该函数将被调用。 max 将为序列中的每个元素调用该函数。并创建一个接收列表并返回第一个(从零开始计数)元素的小函数。所以 __
问题内容: oracle的嵌套表中最大可能的行数是多少? 更新 这给出了错误: 问题答案: 的下标为嵌套表的范围为1..2 ** 31 这样可以有集合中的2层** 31的元件。自从至少8.1.6起,该限制就没有改变,当然,将来可能会改变。
问题内容: 我有以下格式的字典: 演示代码: 我无法获得嵌套字典在内存中的存储方式,因为size如果是136个字节,size是80个字节,而且size是520个字节。 另外,当我对类型从到的变量数据进行类型转换时,字符串变量的大小为。 演示代码: 可以解释一下为什么吗? 问题答案: 字典和列表存储 引用 (类似于Python中的其他所有标准容器)。不遵循引用,它给你的C结构的内存占用 唯一 。引用
问题内容: 我正在使用内置的Django 1.9 和Postgres 9.4。在模型的json字段中,我存储带有一些值(包括数字)的对象。我需要汇总它们以找到最小/最大值。像这样: 另外,提取特定的密钥将很有用: 上面的查询失败了 FieldError:“无法将关键字’my_key’解析为字段。不允许加入’attrs’。” 有可能吗? 笔记: 我知道如何进行简单的Postgres查询来完成这项工作
我是Java8新手,需要重写一段旧代码来实现一个新的alghoritm。任务是过滤每个列表具有最大速度的对象。列表嵌套在地图中:道路的根地图,其中包含道路段的地图,每个道路段的地图包含对象列表,每个对象以时间间隔降低测量的速度。我需要找到每个列表的所有最大速度。 我发现以下链接看起来像我的问题,但我不能适应他们,我不确定我的尝试解决我的问题正确。 如何使用Java8流和过滤器过滤嵌套循环? Jav