Pythonでリストから重複なしの抽出
Pythonに限らず何らかのデータから重複なしでデータをランダムに取りたいということがままあると思う。簡単に思いつくのは、ランダムに一つとって削除、ランダムに一つとって削除を繰り返す方法だが、Pythonの場合ちゃんと関数が用意されている。
良くこの処理をどう実装するか悩んでいたので忘れないようにめも。
Pythonで提供されているrandomモジュールのsampleメソッドを使う。
random.sample(population, k)
population:抽出するリスト
k:抽出する数。但し、len(population)>=kである必要がある。
例
import random index = random.sample(xrange(100), 50)#抽出する添字を取得 samples = [samples[i] for i in index]#sampleをとる
補足
xrangeを使っているのは、整数のリストからの抽出において、リストの長さが非常に長い場合(referenceの例だと1000万ほど)にメモリ効率と速度が向上する為である。
この場合速度に貢献してるかは検証してない。