Python3で重複がないリストを作れた話(setを使って)

先日「重複のないリスト作れた〜やった〜」って記事を書いたけど、Dive into Python3を読んでたら、setを使う方が圧倒的に簡単だったので、このあいだと同じものをsetを使って書いてみた。

 

標準入力から受け取るデータは前回と同じ。

 

 

apple banana orange strawberry orange banana banana grape

 

 

このあいだのを書き直すと次のようになる。

 

 

data = input().rstrip().split()

# 重複なしの集合を生成
no_deplicate = set(data)

for i in no_deplicate:
    print(i + " " + str(data.count(i)))

 

 

実行結果は以下のとおり。

 

 

strawberry 1
apple 1
orange 2
grape 1
banana 3

 

 

前はつらつらと7行書いてたのが、4行になった。簡単・便利。

ただ気をつけたいのは、集合はリストの時に持っていた順番を無視するので、以前のものと実行結果は異なっている。paizaやAIZU Online Judgeでは元のリストの順番を守った上で出力しないといけないこともあるので、その際にはこの方法は使えない。

集合については以下のサイトが簡単でわかりやすく書いていた。

ネイティブデータ型 - Dive Into Python 3 日本語版