Выберите 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)?

Ответы на вопрос(9)

Ваш ответ на вопрос