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