collections.Counterオブジェクトを使用しています。最も一般的な要素を 1 つずつ取得したいのですが、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 ..
を渡しますが、そのdocstringは明示的に「の場合は、すべての要素数をリストします」と言っています。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 に答える