Pythonで配列内の重複する値を抽出する方法
Rubyで配列内の重複する値を抽出する方法 - 久保清隆のブログ
確かに「重複した値が知りたい」ときって、結構あるんですよね。
Rubyにはinjectという記法(?)があるんですね。
じゃあ、Pythonだとどうなるんだろうと考えてみました。
a = [1, 2, 3, 4, 5, 5, 1] t = set() [x for x in a if x in t or t.add(x)] #=>[5, 1]
Rubyのように1行では書けないけど、分かりやすいコードにはなったかなと。
もっと上手い方法があったら、教えてください。
追記 2011/8/5
そういえばPython2.7以降ならばCounterがあるなと思いだしました。
これなら1行で書けます。
from collections import Counter a = [1, 2, 3, 4, 5, 5, 1] [key for key,val in Counter(a).items() if val > 1] #=>[1, 5]
個人的にはCounterよりも、一番最初の方法の方が好きです。
なんとなく。
追記 順序を保持したまま重複した値を排除する方法
一般的にはset()を使いますが、順序が変わってしまいます。
どこかで聞いた方法ですが、以下の方法で実現できます。
a = [2,1,2,4,3,5,4,1] sorted(set(a), key=a.index) #=>[2,1,4,3,5]
よくこんな方法思いつくなぁ・・・