将most_common元素作为生成器进行计数

时间:2012-07-22 15:34:44

标签: python iterator generator counter

我正在使用collections.Counter对象。我希望逐个获得最常见的元素,但most_common方法给出了完整的元素列表 有没有办法将此列表作为生成器?

1 个答案:

答案 0 :(得分: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,但其文档字符串明确说明“If { {1}}为None,然后列出所有元素计数“。

如果这种轻微的差异不会让您担心,上述内容可以简化为:

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

这是如此之短,您可能只想在iter()调用Counter.most_common()周围编写代码来避免调用额外包装函数的开销。

无论如何,输出应如下所示:

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