计算Python中列表中重复的元素总数

计算Python中列表中重复的元素总数,python,list,duplicates,Python,List,Duplicates,我想问一下,如何计算Python中重复的元素总数 比如说 输入:[1,2,2,3,4,4,5,6,7] 输出:2(因为有2个元素是重复的2和4)不完全清楚您想要的是重复的元素数还是重复的元素数。如果希望元素与其他元素重复,可以转换为set并获得差异,如注释中所示。(我在lst中添加了另一个4,以说明差异。) 但是,我认为您需要具有重复项的元素的数量,这需要更多的参与。您可以只计算每个唯一元素出现的频率,但这将具有复杂性O(n²)。这对于短列表是可以的,但对于包含数千个元素的列表则不太好 >

我想问一下,如何计算Python中重复的元素总数

比如说

输入:[1,2,2,3,4,4,5,6,7]


输出:2(因为有2个元素是重复的2和4)

不完全清楚您想要的是重复的元素数还是重复的元素数。如果希望元素与其他元素重复,可以转换为
set
并获得差异,如注释中所示。(我在
lst
中添加了另一个
4
,以说明差异。)

但是,我认为您需要具有重复项的元素的数量,这需要更多的参与。您可以只计算每个唯一元素出现的频率,但这将具有复杂性O(n²)。这对于短列表是可以的,但对于包含数千个元素的列表则不太好

>>> sum(1 for x in set(lst) if lst.count(x) > 1)
2
相反,我建议使用
collections.Counter
(或者只是一个
dict
和一个
for
循环)来计算每个元素出现的频率,然后得到O(n)中计数>1的元素

如果对列表中的元素进行了排序,您也可以在O(n)中使用
itertools.groupby
,但我仍然希望使用更明确的
计数器

>>> from itertools import groupby
>>> sum(1 for k, g in groupby(lst) if len(list(g)) > 1)
2

在一个列表中获取所有重复项,从新列表中删除重复项,然后获取长度

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

m = set([x for x in l if l.count(x) >1])
print(len(m))

此问题中没有任何重复项
len(arr)-len(set(arr))
。应该有许多重复项。有关堆栈溢出的问题。是否进行了一些搜索?是否要重复的元素数,或重复的元素数?也就是说,
[x,x,x]
的预期结果是
1
还是
2
?另一个这样做的结果:
sum(np.unique(arr,return\u counts=True)[1]>1
。无论如何,我个人更喜欢@jizhaosama提供的
>>> from itertools import groupby
>>> sum(1 for k, g in groupby(lst) if len(list(g)) > 1)
2
l = [1,2,2,3,4,4,5,6,7]

m = set([x for x in l if l.count(x) >1])
print(len(m))