我有一个清单:
myList = [-3, -3, 6, 10, 10, 16, 16, 40, 40, 60, 60, 100, 100, 140, 140, 211, -8]
如何有效地删除所有重复的项目,即有一个像这样的新列表:
[6,211,-8]
我知道一种方法,通过跟踪重复的项目,然后使用python set()删除它们,即
listOfDuplicates = [x for x, y in collections.Counter(myList).items() if y > 1]
newList = list(set(myList) - set(listOfDuplicates))
在python中有没有更好的方法(保留顺序)?
答案 0 :(得分:7)
最好的方法是将条件反转为suggested by Jonathon Reinhart
import collections
print [x for x, y in collections.Counter(myList).iteritems() if y == 1]
# [6, 211, -8]
注意:此方法无法维护元素的顺序。例如,
时myList = [1, 1000, 10]
结果是
[1000, 1, 10]
因为collections.Counter
仅在内部是字典。由于字典使用散列,因此无法保证顺序。
要保留订单,您可以像suggested by DSM
那样执行此操作c = Counter(myList)
print [x for x in myList if c[x] == 1]
答案 1 :(得分:0)
myList = [ - 3,-3,6,10,10,16,16,40,40,60,60,100,100,140,140,211,-8]
B = []
d = []
for myList中的x:
try:
w=b.index(x)
if w!=None:
d.append(x)
del b[w]
except:
b.append(x)
B =组(b)中-set(d)
打印清单(b)
这也不会保留顺序