如何在不打印第一次出现的情况下打印列表中的重复项目?

时间:2018-05-03 13:12:13

标签: python list

list = [1,2,1,1,1,2,3,4]中,我想将输出打印为[1,1,1,2],即打印列表中的副本,而不会在第一次出现在python中时打印。

任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:5)

一个简单的解决方案是定义一个使用set来跟踪所看项目的函数。如果未看到某个项目,请将其添加到该集合中。如果看到,则产生该项目。

如果将它包装在生成器中,则可以使此过程变得懒惰,当您只需要迭代结果时,这对于大型列表非常有用。

lst = [1,2,1,1,1,2,3,4]

def dups(x):
    seen = set()
    for i in x:
        if i not in seen:
            seen.add(i)
        else:
            yield i

res = list(dups(lst))

[1, 1, 1, 2]

答案 1 :(得分:3)

实现这一目标的一种方法是:

a = [1,2,1,1,1,2,3,4]
read_so_far = set()
result = []

for val in a:
    if val in read_so_far:
        result.append(val)
    else:
        read_so_far.add(val)

print(result)
  

[1,1,1,2]

答案 2 :(得分:-1)

from collections import Counter

original_list = [1, 2, 1, 1, 1, 2, 3, 4]

c1 = Counter(original_list)
c2 = Counter(set(original_list))

c1.subtract(c2)

print(list(c1.elements()))