list を要素数順に並べるには、
標準ライブラリcollections
のCounter
クラスを使うと簡単に行えます。
list を要素数順に並べる
実際のコードを例に説明します。
# collections ライブラリを import
import collections
# この list を要素数順に並べたい
example_list = ['a', 'b', 'c', 'a', 'a', 'a', 'a', 'c', 'c']
# list を collections ライブラリの Counter クラスに渡す
example_collection = collections.Counter(example_list)
# 生成した Counter オブジェクトをそのまま出力
print("生成したオブジェクトをそのまま出力 -> ", example_collection)
# list を要素数順に並べて出力
print("要素数順に並べて出力 -> ", example_collection.most_common())
出力結果は以下の通りです。
生成したオブジェクトをそのまま出力 -> Counter({'a': 5, 'c': 3, 'b': 1})
要素数順に並べて出力 -> [('a', 5), ('c', 3), ('b', 1)]
生成したオブジェクトをそのまま出力した行では、
生成されたCounter
オブジェクトが表示されています。
Counter
は辞書型dict
のサブクラスで、キーに要素、値に出現回数という形のデータを持っています。
要素数順に並べて出力した行では、
most_common()
メソッドを使って出現回数順に並べられた list 形式で出力されています。
most_common()
メソッドの便利な使い方
most_common()
メソッドは、他にも便利な使い方があります。
実際のコードを例に説明します。
##########
# 上記のコードの下に、以下を記述するとします
##########
# 要素数順に並べた先頭を出力
print("要素数最大の要素と出現回数 -> ", example_collection.most_common()[0])
print("要素数最大の要素 -> ", example_collection.most_common()[0][0])
print("要素数最大の出現回数 -> ", example_collection.most_common()[0][1])
# 要素数順に並べた最後尾を出力
print("要素数最小の要素と出現回数 -> ", example_collection.most_common()[-1])
出力結果は以下の通り。
要素数最大の要素と出現回数 -> ('a', 5)
要素数最大の要素 -> a
要素数最大の出現回数 -> 5
要素数最小の要素と出現回数 -> ('b', 1)
出力結果の1行目は、
要素数順に並べて先頭に来る(つまり出現回数が最大)「要素」と「出現回数」を出力している。
2行目と3行目は、
添え字を付けることで「要素」または「出現回数」だけを出力している。
4行目については、
要素数順に並べて最後尾に来る(つまり出現回数が最小)「要素」と「出現回数」を出力している。
要素数が最大のものをすべて出力する方法
要素数が最大のものが1種類だけであれば、
先ほど説明した通り以下の指定方法で出力することができます。
print("要素数最大の要素 -> ", example_collection.most_common()[0][0])
しかし要素数最大のものが複数あり、それをすべて出力する場合は
以下の様に指定する必要があります。
##########
# 上記のコードの下に、以下を記述するとします
##########
# 最大要素数を取得
max_n = example_collection.most_common()[0][1]
# 最大要素数だった場合は、その要素を出力する
for i in range(len(example_collection)):
if(example_collection.most_common()[i][1] == max_n):
print(example_collection.most_common()[i][0])
paizaのスキルチェック問題でこの様な問題がありましたし、
実際のコードを書く場合にも役立つことがあるかも?