我正在使用 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)
