Cả hai đối tượng danh sách và đối tượng islice đều có thể lặp lại nhưng tại sao lại có sự khác biệt này trong kết quả.từ thư viện 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]
#[]
nhưng đối tượng danh sách và đối tượng islice cần phải hoạt động tương tự, phải không? – John
@John Không, khi bạn lặp lại danh sách, bạn sẽ có một trình lặp mới mỗi lần, nghĩa là bạn vẫn nhận được các giá trị. Khi bạn sử dụng 'islice()' bạn sẽ nhận được một trình tạo, nó sẽ tạo ra các giá trị một lần, và sau đó bị cạn kiệt. Hãy tự mình thử - chỉ cần lặp lại một danh sách hai lần, sau đó lấy một vòng tròn và lặp lại hai lần đó - lưu ý sự khác biệt về hành vi. –
@John Để làm cho hai ví dụ hoạt động tương tự, sử dụng 'r = iter ([1,2,3,4])' thay vì 'r = [1,2,3,4]'. – clacke