Skip to main content
 首页 » 编程设计

python之计数器 most_common 元素作为生成器

2025年05月04日6zengkefu

我正在使用 collections.Counter目的。我想一个一个地获取最常见的元素,但是 most_common 方法为我提供了整个元素列表。
有没有办法将此列表作为生成器?

请您参考如下方法:

您可以简单地将 collection.Counter.most_common() 包装在生成器函数中,如下所示:

from collections import Counter 
 
def most_common(iterable, n=None): 
    return iter(Counter(iterable).most_common() if n is None else 
                Counter(iterable).most_common(n)) 
 
for item in most_common('Mississippi', 3): 
    print item 

注意:虽然看起来将 None 传递给 collection.Counter.most_common() 与不传递任何东西给它是一样的(一个常见的 Python 习惯用法),但当前文档确实没有这么说,所以我决定谨慎行事,使用 .. if .. else .. 条件表达式来只传递它 n 当它不是 None 时,但是它的文档字符串确实明确地说“如果 n 是 None,则列出所有元素计数”。

如果您不担心这种微小的差异,则可以将上面的内容缩短为:

def most_common(iterable, n=None): 
    return iter(Counter(iterable).most_common(n)) 

太短了,您可能只想围绕任何 Counter.most_common() 调用编写 iter() 代码,您必须避免调用额外包装器的开销-功能。

无论如何,输出应该是这样的:

('i', 4) 
('s', 4) 
('p', 2)