如何从列表中删除所有重复项
我想用Python来检查一个列表,并删除所有重复的项。我不想指定哪个是重复的项——我希望代码自己找出有没有重复的,并把它们删掉,只保留每个项的一个实例。如果列表中有多个重复的项,这段代码也要能处理。
举个例子,我下面的代码中,列表 lseparatedOrbList 有12个项目——其中一个重复了六次,另一个重复了五次,还有一个只出现了一次。我希望把这个列表改成只有三个项目——每个项目各保留一个,并且保持它们之前出现的顺序。我试过这样做:
for i in lseparatedOrbList:
for j in lseparatedOrblist:
if lseparatedOrbList[i] == lseparatedOrbList[j]:
lseparatedOrbList.remove(lseparatedOrbList[j])
但是我遇到了这个错误:
Traceback (most recent call last):
File "qchemOutputSearch.py", line 123, in <module>
for j in lseparatedOrblist:
NameError: name 'lseparatedOrblist' is not defined
我猜是因为我在遍历 lseparatedOrbList 的时候又在循环它,但我想不出其他的办法来解决这个问题。
11 个回答
42
这样做会更快,而且能保持原来的顺序:
seen = {}
new_list = [seen.setdefault(x, x) for x in my_list if x not in seen]
如果你不在乎顺序的话,你可以直接这样做:
new_list = list(set(my_list))
142
使用 set()
:
woduplicates = set(lseparatedOrblist)
这个方法会返回一个没有重复元素的集合。如果你出于某种原因需要把它变回列表:
woduplicates = list(set(lseperatedOrblist))
不过,这样得到的列表会和你原来的列表有不同的顺序。
103
只需要创建一个新的列表来填充。如果你要放入的新列表中还没有这个项目,就把它放进去;如果已经有了,就直接跳过,继续看原列表中的下一个项目。
for i in mylist:
if i not in newlist:
newlist.append(i)