4

私はリストを持っています

L = Counter(mywords)

どこ

mywords = ['Well', 'Jim', 'opportunity', 'I', 'Governor', 'University', 'Denver', 'hospitality', 'There', 'lot', 'points', 'I', 'make', 'tonight', 'important', '20', 'years', 'ago', 'I', 'luckiest', 'man', 'earth', 'Michelle', 'agreed', 'marry', '(Laughter)', 'And', 'I', 'Sweetie', 'happy'] 

それよりもはるかに長いですが、それはスニペットです。

次に私がすることは次のとおりです。

print ("\n".join(c.most_common(10)))

そのリストで最も一般的に使用される 10 の単語とその数を表示したいのですが、リスト内の項目ごとに新しい行に出力したいので、代わりに次のエラーが発生します。

TypeError: sequence item 0: expected str instance, tuple found

Python 3 を使用して、任意の助けをいただければ幸いです。

4

4 に答える 4

5
print ("\n".join(map(str, c.most_common(10))))

フォーマットをより細かく制御したい場合は、次のようなフォーマット文字列を使用できます

print ("\n".join("{}: {}".format(k,v) for k,v in c.most_common(10)))
于 2012-10-23T00:34:49.730 に答える
1

最も単純なものは次のとおりです。

for item, freq in L.most_common(10):
    print(item, 'has a count of', freq) # or
    print('there are {} occurrences of "{}"'.format(freq, item))
于 2012-10-23T00:37:21.300 に答える
1

文字列だけが必要な場合:

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)))
于 2012-10-23T00:40:57.753 に答える