删除列表或词典中的重复项

时间:2016-01-13 18:30:31

标签: python

我将项目附加到列表中,我不想要副本。

empty_list = []
empty_list.append('some_item')

我想检查一下是否真的"复制"该项目已存在于列表中。如果是这样,我想不要附加该项目。

我认为应该编写一个if语句来检查该项是否已存在于列表中。如果是这样,请不要追加。

if 'some_item' not in empty_list:
    empty_list.append('some_item')
else:
    pass

是否有Python方法/函数可以执行此操作?

编辑:这是一个重复的问题,它出现了。但是,下面提供的答案似乎比上一个问题更好。

3 个答案:

答案 0 :(得分:4)

要有效地使用集合:

seen = set()
L = []
if 'some_item' not in seen:
    L.append('some_item')
    seen.add('some_item')

答案 1 :(得分:2)

如果必须使用if 'some_item' not in my_list进行检查,则每次都会对整个列表进行O(n)搜索。如果这些物品不一定是可以清洗的,那么这可能仍然是最py的方式。

你可以使用另一个答案所暗示的集合,但是像这样并排维护这两个集合有点烦人。

有些人使用OrderedDict作为数据结构,其行为类似于没有重复的列表(您只需使用空值)。使用这种方法,您无需检查项目是否在那里,您可以简单地分配它,您将不会得到任何重复项。

dict本身的行为与迭代列表和成员资格测试相同,如果您需要实际列表,则始终可以使用list(odict)创建一个。

output = list(OrderedDict.fromkeys(input_iterable))

答案 2 :(得分:1)

直接的答案是使用一个自动忽略重复的集合。

my_set = set()
...
# iterate over your collection of 'some_item's, adding each one
    my_set.add(some_item)

# Finally, if you need the items in a list, rather than a set:
my_list = list(my_set)