質問: Counter(map(tuple, data)) for word, cnt in counter.most_common(): print (word, cnt) ### 結果 ('あ', 'い', 'あ') 1 ('う', 'え', ' お', 'お') 1 ### 目標 'あ' 2 'い' 1 'う' 1 'え' 1 'お’ 2 このように要素の中の要素の個数を一つずつ出したいです。 ### 試したこと 参考サイト Pythonで単語の数え上げとかするならCounterを使うと便利なはなし Pythonで2次元リストの条件に合う要素を抽出 ### 補足情報(言語/FW/ツール等のバージョンなど) 実装環境:Jupiter notebook pythonのバージョン:3.6.0
回答: 要するにリストを一次元に潰せればいいんですよね。 ``` from collections import Counter def flatten_2dim(array): return [item for sublist in array for item in sublist] data = [['あ', 'い', 'あ'], ['う', 'え', 'お', 'お']] counter = Counter(flatten_2dim(data)) for word, cnt in counter.most_common(): print(word, cnt) """実行結果 あ 2 お 2 い 1 う 1 え 1 """ ``` なお、あいうえお順で出力したい場合、most_commonは不適です。 ソートして出力すればよいでしょう。 ``` for word, cnt in sorted(counter.items(), key=lambda x: x[0]): print(word, cnt) """実行結果 あ 2 い 1 う 1 え 1 お 2 """ ``` > > あと、正直tupleもいまいちよく分かってません。 > > > タプルを使うと、複数の値をまとめて扱うことが出来ます。 リストと似ていますが、タプルは**イミュータブル(変更不可)**なオブジェクトです。 詳しくは調べてください。 teratailでは、コードを見やすく表示する機能があります。 編集画面を開き、コードを選択した状態でボタンを押してください。 特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。