Obie listy i obiekty islice są iterowalne, ale dlaczego ta różnica w wyniku.funkcja tee z biblioteki 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]
#[]
, ale obiekt listy i obiekt islice muszą zachowywać się podobnie, prawda? – John
@John Nie, po pętli nad listą otrzymujesz za każdym razem nowy iterator, co oznacza, że wciąż otrzymujesz wartości. Gdy użyjesz 'islice()', otrzymasz generator, który wytworzy wartości raz, a następnie zostanie wyczerpany. Spróbuj sam - wystarczy dwukrotnie przelotować nad listą, a następnie dwukrotnie wykonać pętlę islice i zwrócić uwagę na różnicę w zachowaniu. –
@John Aby oba przykłady zachowywały się podobnie, należy użyć 'r = iter ([1,2,3,4]) zamiast' r = [1,2,3,4] '. – clacke