Python:查找列表中的频率= 2的元素

时间:2016-01-15 21:11:22

标签: python

我们说我有一个清单:

输入: ids = [123,456,123]

我需要找到频率为2的元素。

输出: 123

在python中执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:7)

from collections import Counter
counter = Counter(ids)
[k for k,v in counter.items() if v == 2]

答案 1 :(得分:0)

制作set并计算每个项目(或制作Counterdefaultdict),然后找出哪个项目的计数为2.

ids = [123, 456, 123]
freq = 2
set_ids = set(ids)
counts = {item:ids.count(item) for item in set_ids}
for item in counts:
    if counts[item] == freq:
        print(item)

import collections
ids = [123, 456, 123]
freq = 2
counted_ids = collections.Counter(ids)
for item in counted_ids:
    if counted_ids[item] == freq:
        print(item)

import collections
ids = [123, 456, 123]
freq = 2
counts = collections.defaultdict(int)
for item in ids:
    counts[item] += 1
for item in counts:
    if counts[item] == freq:
        print(item)

答案 2 :(得分:0)

这也可以使用内置方法filter过滤只能完成那些满足您要求的元素,但最好是在集合而不是列表上完成不要为同一个元素重复:

>>> ids = [123, 456, 123]
>>> s = set(ids)
>>> filter(lambda x:ids.count(x)==2, s)
>>> list(filter(lambda x:ids.count(x)==2, s)) #If Python3
[123]