在Python语言中使用max()
函数查找列表(或元组、字典等)中的最大值时。最大值是平局的,Python会选择哪一个呢?这是随机的吗?
例如,如果具有元组列表,并且基于元组的第一个元素选择最大值(使用key=
),但是存在不同的第二个元素,则这是相关的。Python如何决定选择哪一个作为最大值?
发布于 2011-07-22 05:30:31
根据经验测试,列表上的max()
和min()
似乎将在平局的情况下返回列表中与max()
/min()
匹配的第一个:
>>> test = [(1, "a"), (1, "b"), (2, "c"), (2, "d")]
>>> max(test, key=lambda x: x[0])
(2, 'c')
>>> test = [(1, "a"), (1, "b"), (2, "d"), (2, "c")]
>>> max(test, key=lambda x: x[0])
(2, 'd')
>>> min(test, key=lambda x: x[0])
(1, 'a')
>>> test = [(1, "b"), (1, "a"), (2, "d"), (2, "c")]
>>> min(test, key=lambda x: x[0])
(1, 'b')
Jeremy's excellent sleuthing证实确实是这样的。
发布于 2011-07-22 05:37:40
你的问题在某种程度上引出了一个注释。在对数据结构进行排序时,通常希望保持对象的相对顺序,这些对象出于比较的目的而被认为是相等的。这将被称为stable sort。
如果你确实需要这个特性,你可以做一个sort()
,它是will be stable,然后知道相对于原始列表的顺序。
就python本身而言,我不相信在调用max()
时你会得到任何保证,你会得到哪个元素。其他答案给出了cpython的答案,但其他实现(IronPython、Jython)可能会有不同的功能。
https://stackoverflow.com/questions/6783000
复制相似问题