python – 如何在列表中找到重复项并使用它们创建另一个列表?

如何在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]]
上一篇:python – 如何通过值来区分dict?


下一篇:python – 在pandas数据帧中对重复的列ID进行分组