可以说有一个嵌套列表,例如:
my_list = [[1, 2, 21], [1, 3], [1, 2]]
在此函数min()上调用时:
min()
min(my_list)
收到的输出是
[1, 2]
为什么以及如何运作?它有哪些用例?
从字典上比较Python中的列表(和其他序列),而不是基于任何其他参数。
可以将序列对象与具有相同序列类型的其他对象进行比较。比较使用 字典 顺序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较下两个项目,依此类推,直到用尽任何一个序列。
从Wikipedia页面上的字典排序
词典顺序或词典顺序(也称为词典顺序,词典顺序,字母顺序或词典产品)是对单词字母顺序基于其组成字母的字母顺序的方式的概括。
该min函数返回 iterable中 的最小值。因此,该词的词典价值[1,2]最小。您可以使用[1,2,21]
min
[1,2]
[1,2,21]
>>> my_list=[[1,2,21],[1,3],[1,2]] >>> min(my_list) [1, 2]
进行明智的选择my_list,首先[1,2,21]和[1,3]。现在从文档
my_list
[1,3]
如果要比较的两个项目本身 是相同类型的序列 ,则按字典顺序进行 递归 比较。
因此的值[1,1,21]是小于[1,3],由于第二元件[1,3],其为,3是 按字典顺序较高 比的第二元素的值[1,1,21],这是,1。
[1,1,21]
3
1
现在比较[1,2]和[1,2,21],并从文档中添加另一个参考
如果一个序列是另一个序列的 初始子序列 ,则 较短的序列是较小的 (较小的) 序列 。
[1,2]是的初始子序列[1,2,21]。因此,的总价值[1,2]要小于的价值[1,2,21]。因此[1,2]返回为输出。
这可以通过使用sorted函数来验证
sorted
>>> sorted(my_list) [[1, 2], [1, 2, 21], [1, 3]]
如果列表包含重复的min元素 ,则返回第一个
>>> my_list=[[1,2],[1,2]] >>> min(my_list) [1, 2]
可以使用id函数调用来确认
id
>>> my_list=[[1,2],[1,2]] >>> [id(i) for i in my_list] [140297364849368, 140297364850160] >>> id(min(my_list)) 140297364849368
如果所需的比较 不是字典式的, 则key可以使用参数(如Padraic所述)
key
该min函数还有一个名为的 附加可选参数key。该key参数具有一个函数。
可选的key参数指定一个用于的单参数排序函数list.sort()。如果提供了key参数,则必须采用关键字形式(例如min(a,b,c,key=func))。
list.sort()
min(a,b,c,key=func)
例如,如果需要 按长度最小的元素, 则需要使用该len函数。
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',这两者的价值都将更高。
int
list
i
l
'1'
>>> my_list=[[1,1,21],1,'1'] >>> min(my_list) 1
Python3及更高版本
但是,这种令人困惑的技术已在 Python3 中删除。 现在TypeError_它 _引发一个 。阅读Python3.0的新增功能
TypeError
排序比较操作符(<,<=,>=,>)提出一个TypeError例外,当操作数没有意义的自然顺序。因此,这样的表达式1 < '',0 > None或者len <= len不再有效,并且如None < None加薪TypeError,而不是返回False。必然的结果是, 对异构列表进行排序不再有意义-所有元素必须彼此可比 。
<
<=
>=
>
1 < ''
0 > None
len <= len
None < None
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函数在这种情况下有效。
float