列表和islice對象都是可迭代的,但爲什麼會在結果中產生這種差異。itertools庫中的tee函數
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