Я пытаюсь написать алгоритм, который выбирал бы 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)?