Выбор N различных элементов случайным образом из последовательности неизвестной длины только за одну итерацию

Я пытаюсь написать алгоритм, который выбирал бы N различных элементов из последовательности случайным образом, не зная заранее размер последовательности, и где повторять последовательность более одного раза дорого. Например, элементами последовательности могут быть строки огромного файла.

Я нашел решение, когда N=1 (то есть «выбрать ровно один элемент случайным образом из огромной последовательности»):

import random
items = range(1, 10) # Imagine this is a huge sequence of unknown length
count = 1
selected = None
for item in items:
    if random.random() * count < 1:
        selected = item
    count += 1

Но как я могу добиться того же самого для других значений N (скажем, N =3)?

44
задан smci 7 October 2019 в 23:09
поделиться