需要在Python中将NaN排序到列表末尾

huwehgph  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(169)

我正在尝试对一个列表进行排序,并解决Python对naninf的糟糕处理。
我需要将一个列表划分为所有排序(或反转)的数字,并在列表末尾放置任何NaN或Inf。非数字(NaN/Inf)元素的顺序并不重要,只要它们排列在列表末尾即可。
例如:

n = [13, 4, 52, 3.1, float('nan'), float('inf'), 8.2]
print(n)
o = sorted(n, key = lambda x : float('inf') if (x != x) else x)
print(o)
print(reversed(o))

o工作,并输出:

[3.1, 4, 8.2, 13, 52, nan, inf]

但使用reversed输出:

[inf, nan, 52, 13, 8.2, 4, 3.1]

但这不是我想要的。
我希望它只反转naninf以外的值。
预期输出:

[52, 13, 8.2, 4, 3.1, nan, inf]
xmakbtuz

xmakbtuz1#

使用sortedmath.isinfmath.isnan来检测其值是否为naninf。如果它们是实数,则我对它们求反以颠倒它们的顺序。
示例:

import math
n = [13, 4, 52, 3.1, float('nan'), float('inf'), 8.2]
lst = sorted(n, key=lambda x: (math.isinf(x) or math.isnan(x), -x))
print(lst)

输出:

[52, 13, 8.2, 4, 3.1, nan, inf]

如果您不想reverse这些值:

print(sorted(n))

就够了。
输出:

[3.1, 4, 8.2, 13, 52, nan, inf]

相关问题