当max()
在Python中使用函数来查找列表中的最大值(或元组,字典等)时,最大值是一个平局,Python选择哪一个?是随机的吗?
例如,如果一个具有元组列表并且一个key=
基于元组的第一个元素选择最大值(使用a )但是存在不同的第二个元素,则这是相关的.Python如何选择哪一个作为最大值?
我在使用Python v2.6.
小智 74
在Python 2中,这未在文档中指定,并且不在标准库的可移植in-Python部分中,因此这种行为可能因实现而异.
在CPython 2.7的源代码中,这是max()
由sorted(iterable, key=keyfunc, reverse=True)[0]
[ source ]实现的,它包含了更通用的heapq.nlargest(1, iterable, key=keyfunc)
函数 [ source ].
./Python/bltinmodule.c
将迭代值并使用builtin_max
[ docs ]查看它们是否大于当前值.如果是这样,则更大的值将替换它.将跳过相等的值.
结果是在平局的情况下将选择第一个最大值.
Dan*_*olo 21
从经验测试来看,似乎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')
Run Code Online (Sandbox Code Playgroud)
和Jeremy的优秀侦探证实,这确实是这样的.
Chr*_*nds 14
对于Python 3,在max()
tie的情况下的行为不再仅仅是其他答案中详述的实现细节.现在可以保证该功能,因为Python 3文档明确指出:
如果多个项目是最大的,则该函数返回遇到的第一个项目.这与其他排序稳定性保留工具一致,例如sorted(iterable,key = keyfunc,reverse = True)[0]和heapq.nlargest(1,iterable,key = keyfunc).
归档时间: |
|
查看次数: |
21363 次 |
最近记录: |