Python - 查找并销毁列表中的重复项

时间:2012-03-31 17:42:20

标签: python list

在Python中,有没有办法检查列表中的重复项目,如果有,则删除它们?我正在寻找这样的东西:

>>> def check():
>>>    # put code here
>>> list = ["foo", "foo", "bar"]
>>> check(list)
>>> list
["foo", "bar"]
>>> list2 = ["foo", "bar", "example"]
>>> check(list2)
>>> list2
["foo", "bar", "example"]

提前致谢!

更新

伙计们,我是编程新手,订单并不重要。所以for循环应该没问题。但不管怎样,谢谢!

5 个答案:

答案 0 :(得分:5)

此处set可能是更好的数据结构,因为它首先不能有重复数据。您还可以将其用作统一列表的工具:

>>> lst = ["bar", "foo", "foo"]
>>> set(lst)
set(['foo', 'bar'])
>>> list(set(lst))
['foo', 'bar']

或者,如果您需要保留订单,可以将数据保存在OrderedDict

>>> from collections import OrderedDict
>>> d = OrderedDict.fromkeys(lst)
>>> d
OrderedDict([('bar', None), ('foo', None)])
>>> list(d)
['bar', 'foo']

请注意,出于性能原因,首先使用正确的数据结构将更为理想,而不是使用原始列表并在每次操作后使用其中一个转换从中删除重复项。

答案 1 :(得分:2)

>>>lis = ["foo", "foo", "bar"]
>>>lis=list(set(lis))
>>>print(lis)
['foo','bar']

答案 2 :(得分:2)

如果您需要保留列表中的订单:

s = set()
new_list = [v for v in old_list if not (v in s or s.add(v))]

如果v尚未在s中,则s.add(v)将被评估并返回None,因此将获取该值。否则,v in s为True,并跳过该值。

如果您不关心订单,只需使用已建议的set()

答案 3 :(得分:0)

此IDLE会话将显示一种方便的Python方法,通过转换为集合来删除重复项目,其中通过转换删除重复项。

>>>lis = ["foo", "foo", "bar"]
>>>list(set(lis))

答案 4 :(得分:0)

如果使用python> 2.4

mylist = ["foo", "foo", "bar"]

myList = sorted(set(myList))

输出

['bar', 'foo']