删除列表中的重复项时出现奇怪的行为

jle*_*and 3 python list duplicates

我有一个整数列表.

我想做的是对它们进行排序并删除所有重复项.我在网上看到了两种不同的解决方案.两者似乎都给出了与我期望的结果不同的结果.

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]
Run Code Online (Sandbox Code Playgroud)

另一种方法,使用集合:

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]
Run Code Online (Sandbox Code Playgroud)

有人会知道这种行为的原因吗?

谢谢!

NPE*_*NPE 8

这是我会用的:

>>> 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]
Run Code Online (Sandbox Code Playgroud)

您的代码无法按预期工作的原因是,dict它不保证其密钥的任何特定顺序.同样,set也不保证其元素的排序.

因此,分拣步骤必须在最后.