我几乎需要编写一个程序来检查列表是否有任何重复项,如果有,它会删除它们并返回一个新列表,其中包含未重复/删除的项目。这就是我所拥有的,但老实说我不知道该怎么做。
def remove_duplicates():
t = ['a', 'b', 'c', 'd']
t2 = ['a', 'c', 'd']
for t in t2:
t.append(t.remove())
return t
原文由 Neemaximo 发布,翻译遵循 CC BY-SA 4.0 许可协议
获取唯一项目集合的常用方法是使用
set
。集合是 不同 对象的 无序 集合。要从任何可迭代对象创建集合,您只需将其传递给内置的set()
函数。如果您以后再次需要真实列表,您可以类似地将集合传递给list()
函数。以下示例应涵盖您尝试执行的任何操作:
从示例结果中可以看出, _原始顺序没有得到维护_。如上所述,集合本身是无序的集合,因此失去了顺序。将集合转换回列表时,会创建任意顺序。
维持秩序
如果顺序对您很重要,那么您将不得不使用不同的机制。一个非常常见的解决方案是依靠
OrderedDict
在插入过程中保持键的顺序:从 Python 3.7 开始,内置字典也保证保持插入顺序,因此如果您使用的是 Python 3.7 或更高版本(或 CPython 3.6),也可以直接使用它:
请注意,这可能会产生一些开销,即首先创建字典,然后从中创建列表。如果您实际上不需要保留顺序,则通常最好使用集合,特别是因为它为您提供了更多操作。查看 此问题 以获取更多详细信息以及在删除重复项时保留顺序的替代方法。
最后请注意,
set
以及OrderedDict
/dict
解决方案都要求您的项目是可 _散列的_。这通常意味着它们必须是不可变的。如果您必须处理不可散列的项目(例如列表对象),那么您将不得不使用一种缓慢的方法,在这种方法中,您基本上必须将每个项目与嵌套循环中的每个其他项目进行比较。