我正在尝试对一个列表进行排序,并解决Python对nan
和inf
的糟糕处理。
我需要将一个列表划分为所有排序(或反转)的数字,并在列表末尾放置任何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]
但这不是我想要的。
我希望它只反转nan
和inf
以外的值。
预期输出:
[52, 13, 8.2, 4, 3.1, nan, inf]
1条答案
按热度按时间xmakbtuz1#
使用
sorted
与math.isinf
和math.isnan
来检测其值是否为nan
或inf
。如果它们是实数,则我对它们求反以颠倒它们的顺序。示例:
输出:
如果您不想
reverse
这些值:就够了。
输出: