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]

よくこんな方法思いつくなぁ・・・