Sia l'elenco che gli oggetti islice sono iterabili, ma perché questa differenza nel risultato.funzione tee dalla libreria itertools
r = [1, 2, 3, 4]
i1, i2 = tee(r)
print [e for e in r if e < 3]
print [e for e in i2]
#[1, 2]
#[1, 2, 3, 4]
r = islice(count(), 1, 5)
i1, i2 = tee(r)
print [e for e in r if e < 3]
print [e for e in i2]
#[1, 2]
#[]
ma l'oggetto elenco e l'oggetto islice devono comportarsi allo stesso modo, giusto? – John
@John No, quando esegui il ciclo sull'elenco, ottieni un nuovo iteratore ogni volta, il che significa che ottieni comunque i valori. Quando si usa 'islice()' si ottiene un generatore, che produrrà i valori una volta e quindi sarà esaurito. Provalo tu stesso: basta ripetere il ciclo su una lista due volte, quindi eseguire un'islice e ripetere l'operazione due volte - notare la differenza di comportamento. –
@John Per far sì che i due esempi si comportino allo stesso modo, usate 'r = iter ([1,2,3,4])' piuttosto che 'r = [1,2,3,4]'. – clacke