python - 每次我对 float 列表(具有 nan 值)进行排序时,我都会得到一个不同的列表 python

标签 python list

<分区>

我正在尝试对 python 中的 float 列表(和 nan 值)进行排序,例如:

print max(list)
list.sort()
list.reverse()
for i in range(100):
    print list[i]
nan
nan
2.0803176458
nan
nan
23.1620761136
15.9680303803
15.3134388394
14.68055076
11.450492644
8.96268420227
8.15331554187
5.24420616524
3.9665322752
3.69758305442
1.08500491226
-0.227894225141
-0.254784399765
-0.866879940573
-1.21267324819
-2.21811678021
nan
nan
2.69325878444

当我运行它时,我最多得到不同的值,并且当它打印出来时我的列表没有排序(结果在上面的代码下面)

有人知道为什么会这样吗?

最佳答案

>>> float('nan') < 3.14
False
>>> float('nan') > 3.14
False
>>> float('nan') < float('nan')
False
>>> float('nan') > float('nan')
False
>>> float('nan') == float('nan')
False

问题是 nan 没有相对于其他数字的排序。比较总是返回 False,无论是针对数字还是其他 nan 值。 sort() 的约定要求列表项具有一致的顺序才能正确排序。

要对 nan 进行排序,您需要覆盖此行为并定义您希望 nan 进行排序的方式。例如,如果您希望它出现在所有其他数字之前,您可以使用 key 函数使 nan 等同于 -inf

>>> l = [float('nan'), 3.14, -1, 0, float('nan')]
>>> import math
>>> sorted(l, key=lambda f: float('-inf') if math.isnan(f) else f)
[nan, nan, -1, 0, 3.14]

关于python - 每次我对 float 列表(具有 nan 值)进行排序时,我都会得到一个不同的列表 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062697/

相关文章:

python - 如何根据另一列添加到 Pandas 列

python - 如何使用 Python 获取 MongoDB 中特定键的值

python - 获取列表中*计数最少的元素

新的/修改的/删除的文件的 GIT 列表

python - 如何在不使用加号的情况下在python中合并两个列表

java - 如何将数据从重复列表数据转换为组数据列表

c# - 从字典值中获取所有项目,这些值也是项目列表

python - 数据库列的混合内容(float || unicode)

python - sklearnpartial_fit() 没有像 fit() 显示准确的结果

python - 这段Python代码中需要 'or default'做什么?