我将项目附加到列表中,我不想要副本。
empty_list = []
empty_list.append('some_item')
我想检查一下是否真的"复制"该项目已存在于列表中。如果是这样,我想不要附加该项目。
我认为应该编写一个if语句来检查该项是否已存在于列表中。如果是这样,请不要追加。
if 'some_item' not in empty_list:
empty_list.append('some_item')
else:
pass
是否有Python方法/函数可以执行此操作?
编辑:这是一个重复的问题,它出现了。但是,下面提供的答案似乎比上一个问题更好。
答案 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)