我知道这可能是一个简单的答案,但我无法弄清楚.Python中保留重复项的最佳方法是什么:
x = [1,2,2,2,3,4,5,6,6,7]
Run Code Online (Sandbox Code Playgroud)
输出应该是:
[2,6]
Run Code Online (Sandbox Code Playgroud)
我发现这个链接:在python中查找(并保留)子列表的副本,但我仍然相对较新的Python,我无法让它用于一个简单的列表.
mgi*_*son 14
我用的是collections.Counter:
from collections import Counter
x = [1, 2, 2, 2, 3, 4, 5, 6, 6, 7]
counts = Counter(x)
output = [value for value, count in counts.items() if count > 1]
Run Code Online (Sandbox Code Playgroud)
这是另一个版本,它保持项目第一次复制时的顺序,只假设传入的序列包含可清除的项目,并且它将返回到何时set或被yeild引入语言时(无论何时).
def keep_dupes(iterable):
seen = set()
dupes = set()
for x in iterable:
if x in seen and x not in dupes:
yield x
dupes.add(x)
else:
seen.add(x)
print list(keep_dupes([1,2,2,2,3,4,5,6,6,7]))
Run Code Online (Sandbox Code Playgroud)
如果列表已经排序,这是一个简短的方法:
x = [1,2,2,2,3,4,5,6,6,7]
from itertools import groupby
print [key for key,group in groupby(x) if len(list(group)) > 1]
Run Code Online (Sandbox Code Playgroud)