当max()
在Python中使用函数来查找列表中的最大值(或元组,字典等)时,最大值是一个平局,Python选择哪一个?是随机的吗?
例如,如果一个具有元组列表并且一个key=
基于元组的第一个元素选择最大值(使用a )但是存在不同的第二个元素,则这是相关的.Python如何选择哪一个作为最大值?
我在使用Python v2.6.
sorted([2, float('nan'), 1])
回报 [2, nan, 1]
(至少在Activestate Python 3.1实现上.)
我理解这nan
是一个奇怪的对象,所以如果它出现在排序结果中的随机位置,我不会感到惊讶.但它也混淆了容器中非纳米数的排序,这实在是出乎意料.
我问了一个相关的问题有关max
,并根据我理解为什么sort
是这样工作的.但是,这应该被视为一个错误吗?
文档只是说"返回一个新的排序列表[...]"而没有指定任何细节.
编辑:我现在同意这不违反IEEE标准.但是,我认为这是任何常识观点的错误.即使微软经常承认自己的错误,也已经认识到这个错误,并将其修复为最新版本:http://connect.microsoft.com/VisualStudio/feedback/details/363379/bug- in-list-double-sort-in-list-which-contains-double-nan.
无论如何,我最终关注@ khachik的回答:
sorted(list_, key = lambda x : float('-inf') if math.isnan(x) else x)
Run Code Online (Sandbox Code Playgroud)
我怀疑它与默认情况下的语言相比会导致性能下降,但至少它可行(除非我介绍的任何错误).
> import numpy as np
> min(50, np.NaN)
50
> min(np.NaN, 50)
nan
Run Code Online (Sandbox Code Playgroud)
(相同的行为发生在max
)
我知道我可以通过使用numpy.nanmin
. 但是当顺序颠倒时,是什么导致了变化呢?是min
输入顺序敏感?