Оба объекта списка и islice являются итерируемыми, но почему это различие в результате.tee function from itertools library
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]
#[]
но объект списка и объект islice должны вести себя одинаково, не так ли? – John
@John Нет, когда вы перебираете список, вы каждый раз получаете новый итератор, то есть вы все равно получаете значения. Когда вы используете 'islice()', вы получаете генератор, который будет давать значения один раз, а затем будет исчерпан. Попробуйте сами - просто перейдите по списку дважды, затем возьмите изолику и зациклируйте над этим дважды - обратите внимание на разницу в поведении. –
@John Чтобы сделать два примера одинаковыми, используйте 'r = iter ([1,2,3,4])', а не 'r = [1,2,3,4]'. – clacke