nishiyamasuの日記

忘れやすいので、メモ。。。

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

予想通りに結果を得られました。