我正在使用collections.Counter对象。我想一一获取最常见的元素,但该most_common
方法为我提供了整个元素列表。
有什么办法可以将此列表作为生成器?
问问题
1742 次
1 回答
1
您可以像这样简单地包装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))
这太短了,您可能只想iter()
围绕任何Counter.most_common()
调用进行编码,以避免调用额外包装函数的开销。
无论如何,输出应如下所示:
('i', 4)
('s', 4)
('p', 2)
于 2012-07-22T15:56:49.400 回答