从列表中删除所有重复项 - 不保留重复项的实例

时间:2014-03-31 11:55:58

标签: python list set duplicates duplicate-removal

我有一个清单:

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中有没有更好的方法(保留顺序)?

2 个答案:

答案 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)

这也不会保留顺序