Tanto la lista como los objetos islice son iterables, pero esta diferencia en el resultado.función de la función de la biblioteca 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]
#[]
pero el objeto de la lista y el objeto islice deben comportarse de manera similar, ¿no? – John
@John No, cuando revisas la lista, obtienes un nuevo iterador cada vez, lo que significa que aún obtienes los valores. Cuando usas 'islice()' obtienes un generador, que producirá los valores una vez y luego se agotará. Pruébelo usted mismo, simplemente recorra dos veces una lista, luego tome un islice y repítalo dos veces, observe la diferencia en el comportamiento. –
@John Para hacer que los dos ejemplos se comporten de manera similar, use 'r = iter ([1,2,3,4])' en lugar de 'r = [1,2,3,4]'. – clacke