Pythonで整数のリストから重複(出現回数)を調べる
お題として、整数から成るリストの中から重複(出現回数)を調べます。
例としては、次のようになります。
調べる対象のリスト: [3, 9, 2, 2, 2, 7, 8, 8] 期待する結果: 3 -> 1回 9 -> 1回 2 -> 3回 7 -> 1回 8 -> 2回
このお題を解くPythonプログラムを考えます。
先にプログラムを示したいと思います。
def count_duplicate(array): duplicate = {} for i in array: if i in duplicate: duplicate[i] += 1 else: duplicate[i] = 1 return duplicate x = [3, 9, 2, 2, 2, 7, 8, 8] duplicate_map = count_duplicate(x) for k in duplicate_map.keys(): print(k, duplicate_map[k])
このプログラムの鍵となるところは、関数count_duplicateです。
count_duplicateは、引数に調べる対象のリストを取り、調べた結果を格納するディクショナリduplicateを返します。duplicateは、キーにリスト中の整数、バリューに整数の出現回数を持ちます。
関数count_duplicateの中の処理としては次のようになります。
調べる対象のリストについて、for文のループを回す。 ↓ duplicateに ・対象の整数がある場合、出現回数を+1する。 ・対象の整数がない場合、出現回数を1にする。
count_duplicateの実行し終えた時点で、お題を解くことはほぼ終わっています。
あとは結果を出力します。
結果のディクショナリからキー、バリューをすべて取得します。次の部分です。
for k in duplicate_map.keys(): print(k, duplicate_map[k])
duplicate_map.keys()
ですべてのキーを取得して、for文の中で、duplicate_map[k]
でバリューにアクセスしprintで出力します。
実行結果は次のようになります。
各行について、
・左の値:整数
・右の値:出現回数
になります。
3 1 9 1 2 3 7 1 8 2
予想通りに結果を得られました。