Dưới đây là một số xét nghiệm về itertools.tee
:cách thức hoạt động của itertools.tee, có thể nhập 'itertools.tee' được sao chép để lưu "trạng thái" của nó?
li = [x for x in range(10)]
ite = iter(li)
==================================================
it = itertools.tee(ite, 5)
>>> type(ite)
<type 'listiterator'>
>>> type(it)
<type 'tuple'>
>>> type(it[0])
<type 'itertools.tee'>
>>>
>>> list(ite)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(it[0]) # here I got nothing after 'list(ite)', why?
[]
>>> list(it[1])
[]
====================play again===================
>>> ite = iter(li)
it = itertools.tee(ite, 5)
>>> list(it[1])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(it[2])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(it[3])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(it[4])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(ite)
[] # why I got nothing? and why below line still have the data?
>>> list(it[0])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(it[0])
[]
====================play again===================
>>> ite = iter(li)
itt = itertools.tee(it[0], 5) # tee the iter's tee[0].
>>> list(itt[0])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(itt[1])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(it[0])
[] # why this has no data?
>>> list(it[1])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(ite)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Câu hỏi của tôi là
- Làm thế nào để làm việc tee và tại sao đôi khi bản gốc iter 'có dữ liệu' và khác thời gian nó không?
- Tôi có thể giữ bản sao sâu lặp lại là "hạt giống trạng thái" để giữ trạng thái của trình lặp thô và sử dụng nó sau này không?
- Tôi có thể trao đổi 2 iters hoặc 2
itertools.tee
?
Cảm ơn!
Tôi không chắc chắn nếu tôi hiểu câu hỏi của bạn, nhưng tôi __think__ bạn không nên chạm vào trình lặp ban đầu sau khi bạn sử dụng 'itertools.tee' để nhân nó. Bạn nên sử dụng các biến lặp 'n + 1' từ' tee' và sử dụng một trong số đó là 'nguyên bản' để' theo dõi trạng thái 'bất kỳ ý nghĩa nào của bạn bằng cách – Kimvais