Sto provando a scrivere un algoritmo che scegli N elementi distinti da una sequenza a caso, senza conoscere la dimensione della sequenza in anticipo e dove è costoso iterare su la sequenza più di una volta. Ad esempio, gli elementi della sequenza potrebbero essere le linee di un file enorme.Scegliere N elementi a caso dalla sequenza di lunghezza sconosciuta
Ho trovato una soluzione quando N = 1 (cioè, quando si cerca di scegliere esattamente un elemento a caso da una sequenza enorme):
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
Ma come posso ottenere la stessa cosa per altri valori di N (per esempio, N = 3)?
Non è una risposta alla domanda posta, ma si noti che per built-in collezioni (e molti altri) si può solo fare [ 'random.sample (your_collection, N)' ] (https://docs.python.org/2/library/random.html#random.sample). –