我有一个整数列表。
我想做的是对它们进行排序并删除所有重复项。 我在互联网上看到了两种不同的解决方案。两者似乎都给出了相同的结果,这不是我期望的结果。
a = integer_combinations(5, 5)
print a
>>[4, 8, 16, 32, 9, 27, 81, 243, 16, 64, 256, 1024, 25, 125, 625, 3125]
b = sorted(a)
print b
>>[4, 8, 9, 16, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125]
c = dict().fromkeys(sorted(a)).keys()
print c
>> [32, 64, 4, 1024, 625, 8, 9, 256, 16, 81, 243, 3125, 25, 27, 125]
另一种方法,使用集合:
d = list(set(b))
print d
>> [32, 64, 4, 1024, 625, 8, 9, 256, 16, 81, 243, 3125, 25, 27, 125]
What I expect is :
>>[4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125]
有人会知道这种行为的原因吗?
谢谢!
最佳答案
这是我会用到的:
>>> a = [4, 8, 16, 32, 9, 27, 81, 243, 16, 64, 256, 1024, 25, 125, 625, 3125]
>>> sorted(set(a))
[4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125]
您的代码无法按预期工作的原因是 dict
不保证其键的任何特定顺序。同样,set
不能保证其元素的顺序。
因此,排序步骤必须在最后进行。
关于python - 删除列表中的重复项时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178925/