在list = [1,2,1,1,1,2,3,4]
中,我想将输出打印为[1,1,1,2]
,即打印列表中的副本,而不会在第一次出现在python中时打印。
任何帮助将不胜感激。谢谢。
答案 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()))