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

标签 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]

另一种方法,使用集合:

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/

相关文章:

python - 程序不退出。如何找出python在做什么?

list - swi-prolog : how to sort list of lists by NTH element of sublist, 允许重复

c# - 如何对具有特定结构元素的结构列表进行排序?

python - 如何使用 csv 将列表编写为单独的元素?

mysql - 如何从 MySQL 表中删除除具有最新日期的行之外的所有重复行?

memory-management - Dask drop 重复内存错误 split_out

python - 根据 python 中的用户输入更新多个变量之一

python - 如何休眠到特定时间 YYYY-MM-DD HH :MM:SS?

python - 在 VSCode 中加载并显示现有 Jupyter 笔记本中的输出单元

python - 合并两个排序的列表列表,如果内部列表中有重复值,则只保留第一个列表中的值