0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

list を要素数順に並べるには、
標準ライブラリcollectionsCounterクラスを使うと簡単に行えます。

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のスキルチェック問題でこの様な問題がありましたし、
実際のコードを書く場合にも役立つことがあるかも?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?