Python:是否有任何原因导致列表的子集排序与原始列表不同?

2024-04-26 07:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:对于所有偏执狂来说,复制代码不再使用eval。你知道吗


我不会说我在Python中发现了一个bug(这会让我立刻被否决),但这是一个非常奇怪的行为。我有一个列表pairs,并用一个不改变状态的自定义key函数对其调用sort。然后我取pairs的一个子集(以相同的顺序),用相同的键函数再次调用sort。结果与原始子集不同。这可能吗?你知道吗

我已经为你们提供了一份复印件。准备步骤:

  1. 下载所有4个文件(dpd.txtindex_map.txtids.txtweirdsortbehavior.py),并将它们放在同一目录中

  2. 运行Python程序(注意:对于python3,还没有对python2进行测试)。对我来说是打印出来的

    0 1916
    1 0
    
  3. 对这种行为感到惊奇。你知道吗

对此有何解释?我能做些什么来修复它?谢谢。你知道吗


Tags: key函数代码txt编辑列表顺序状态
1条回答
网友
1楼 · 发布于 2024-04-26 07:21:29

我想我找到原因了。那是因为在dpd.txt中有一些nan。你知道吗

nan无法比较:

float('nan') > 1 # Falsefloat('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

会有用的。你知道吗

相关问题 更多 >