如何在Python列表中找到重复项并创建另一个重复项列表?该列表仅包含整数.
解决方法:
要删除重复项,请使用set(a).要打印重复项,例如:
a = [1,2,3,2,1,5,6,5,5,5]
import collections
print [item for item, count in collections.Counter(a).items() if count > 1]
## [1, 2, 5]
请注意,Counter不是特别有效(timings)并且在这里可能有点过分.套装会表现得更好.此代码计算源顺序中的唯一元素列表:
seen = set()
uniq = []
for x in a:
if x not in seen:
uniq.append(x)
seen.add(x)
或者,更简洁地说:
seen = set()
uniq = [x for x in a if x not in seen and not seen.add(x)]
我不推荐后一种风格,因为不明显的是没有看到.add(x)正在做什么(set add()方法总是返回None,因此需要不).
要计算没有库的重复元素列表:
seen = {}
dupes = []
for x in a:
if x not in seen:
seen[x] = 1
else:
if seen[x] == 1:
dupes.append(x)
seen[x] += 1
如果列表元素不可清除,则不能使用集合/ dicts并且必须求助于二次时间解决方案(将每个解析比较每个).例如:
a = [[1], [2], [3], [1], [5], [3]]
no_dupes = [x for n, x in enumerate(a) if x not in a[:n]]
print no_dupes # [[1], [2], [3], [5]]
dupes = [x for n, x in enumerate(a) if x in a[:n]]
print dupes # [[1], [3]]