1. ホーム
  2. python

[解決済み] 1つのファイルからランダムな行を読み取るにはどうしたらいいですか?

2022-02-12 13:14:33

質問

内蔵されている方法はありますか?そうでない場合、オーバーヘッドをあまりかけずにこれを行うにはどうしたらよいでしょうか?

どのように解決するのですか?

ビルトインではなく、アルゴリズム R(3.4.2) (Knuthの「The Art of Computer Programming」に出てくるWatermanの「Reservoir Algorithm」が良い(非常に単純化されたバージョンで)。

import random

def random_line(afile):
    line = next(afile)
    for num, aline in enumerate(afile, 2):
        if random.randrange(num):
            continue
        line = aline
    return line

num, ... in enumerate(..., 2) イテレータは、2, 3, 4...というシーケンスを生成します。 イテレータは randrange の確率で0になります。 1.0/num -- これは,現在選択されている行を置換しなければならない確率です(参照されたアルゴリズムのサンプルサイズ1の特殊なケースです。 する ということです。