【发布时间】:2016-01-15 21:11:21
【问题描述】:
假设我有一个列表:
输入: ids = [123, 456, 123]
我需要找到频率为 2 的元素。
输出: 123
在 python 中执行此操作的最佳方法是什么?
【问题讨论】:
-
@njzk2 wtf?每第二个元素与 2 的频率并不完全相同......
-
频率、周期、相同差异
标签: python
假设我有一个列表:
输入: ids = [123, 456, 123]
我需要找到频率为 2 的元素。
输出: 123
在 python 中执行此操作的最佳方法是什么?
【问题讨论】:
标签: python
from collections import Counter
counter = Counter(ids)
[k for k,v in counter.items() if v == 2]
【讨论】:
创建一个set 并对每个项目进行计数(或创建一个Counter 或defaultdict),然后找出哪个计数为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)
【讨论】:
这也可以使用内置方法来完成,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]
【讨论】: