9

我知道这可能是一个简单的答案,但我无法弄清楚。Python中将重复项保存在列表中的最佳方法是什么:

x = [1,2,2,2,3,4,5,6,6,7]

输出应该是:

[2,6]

我找到了这个链接:Find (and keep) duplicates of sublist in python,但我对 Python 还是比较陌生,我不能让它为一个简单的列表工作。

4

4 回答 4

16

我会使用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]

这是另一个版本,它保留了第一次复制项目的顺序,它只假设传入的序列包含可散列的项目,并且它会回到何时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]))
于 2013-04-04T13:27:53.383 回答
10

如果列表已经排序,这是一种简短的方法:

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]
于 2013-04-04T13:27:45.607 回答
0

保持简单:

array2 = []
aux = 0
aux2=0
for i in x:
    aux2 = i
    if(aux2==aux):
        array2.append(i)
    aux= i
list(set(array2))

那应该工作

于 2013-04-04T13:34:08.390 回答
0

效率不高,但只是为了获得输出,您可以尝试:

import numpy as np

def check_for_repeat(check_list):
    repeated_list = []

    for idx in range(len(check_list)):
        elem = check_list[idx]
        check_list[idx] = None

        if elem in temp_list:
            repeated_list.append(elem)

    repeated_list = np.array(repeated_list)

    return list(np.unique(repeated_list))
于 2020-03-06T12:45:07.870 回答