编辑: 仅供所有偏执狂参考,复制代码不再使用eval。
我并不是说我在Python中发现了一个bug(这会让我立刻被否决),但这是一个很诡异的行为。我有一份清单 pairs 打电话 sort 上面有一个自定义 key 不改变状态的函数。然后我取 成对的 (按相同的顺序),并调用 分类 再次使用相同的键功能。结果与原始子集不同。这可能吗?
pairs
sort
key
成对的
分类
我已经为你们提供了一份复印件 as a GitHub Gist .准备步骤:
下载所有4个文件( dpd.txt ,则, index_map.txt ,则, ids.txt 和 weirdsortbehavior.py )并将它们放在同一目录中
dpd.txt
index_map.txt
ids.txt
weirdsortbehavior.py
运行Python程序(注意:对于Python 3,尚未针对Python 2进行测试)。对我来说是打印出来的
0 1916 1 0
对此的解释是什么?我能做些什么来修复它?谢谢
我想我找到了原因。那是因为 nan 在里面 dpd.txt 。
nan
和 南安 无法比较:
南安
float('nan') > 1 # False 虽然 float('nan') < 1 # False
float('nan') > 1 # False
float('nan') < 1 # False
所以这完全打破了对比。
如果将键比较功能更改为:
def _key(id_): import math result = -dpd[index_map[id_]], id_.lower() if math.isnan(result[0]): result = 0, id_.lower() return result
它会起作用的。