文字列だけが必要な場合:
print("\n".join(element for element, count in c.most_common(10)))
文字列とカウントを次の形式で印刷する場合('foo', 11)
:
print ("\n".join(str(element_and_count)
for element_and_count in c.most_common(10)))
選択した他の形式の文字列とカウントが必要な場合:
print ("\n".join("{}: {}".format(element, count)
for element, count in c.most_common(10)))
なんで?このmost_common
関数は(element, count)
ペアを返します。それらはタプルであり、ストリングではありません。タプルを結合するだけでは不十分です。もちろん、文字列に変換することもできますが(上記のオプション#2)、実際('foo', 11)
に各行の形式が必要な場合にのみ機能します。他の2つのオプションを取得するには、タプルの半分を無視してもう1つを使用するか、独自のフォーマット式を記述します。
いずれの場合も、によって返されるシーケンスの各メンバーに対して何かを実行する必要がありますmost_common
。これを行うPythonの方法は、リスト内包表記またはジェネレータ式を使用することです。
その間、これらの種類のケースをデバッグする方法を学ぶ必要があります。join
が表示されたらTypeError
、動作するものが見つかるまで細かく分割します(10ではなく2で試してみてください。そうすれば、読むことが少なくなります)。
>>> print("\n".join(c.most_common(2)))
TypeError: sequence item 0: expected str instance, tuple found
>>> c.most_common(2)
[('I', 4), ('man', 1)]
あはは!リスト内の各ものは、単なる文字列ではなく、2つのもののタプルです。なんで?
>>> help(c.most_common)
most_common(self, n=None) method of collections.Counter instance
List the n most common elements and their counts from the most
common to the least. If n is None, then list all element counts.
>>> Counter('abcdeabcdabcaba').most_common(3)
[('a', 5), ('b', 4), ('c', 3)]
OK、それで最も一般的な要素とそれらのカウントを返します。要素が欲しいだけです。それで:
>>> [element for element, count in c.most_common(2)]
['I', 'man']
今、それは私が参加できるものです:
>>> '\n'.join([element for element, count in c.most_common(2)])
'I\nman'
また、角かっこと親の両方は必要ありません(リスト内包表記の代わりに式を使用できます)。
>>> '\n'.join(element for element, count in c.most_common(2))
'I\nman'
そして今、私はそれを印刷することができます:
>>> print('\n'.join(element for element, count in c.most_common(2)))
I
man
そして、それが機能しているので、10個すべてを印刷します。
>>> print('\n'.join(element for element, count in c.most_common(10)))