Im Folgenden sind einige Tests über itertools.tee
:wie itertools.tee funktioniert, kann type 'itertools.tee' dupliziert werden, um seinen "Status" zu speichern?
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]
Meine Frage
ist- Wie funktioniert Tee und warum manchmal die ursprüngliche iter ‚hat Daten‘ und andere Zeit nicht?
- Kann ich eine tiefere iter-Kopie als "Status-Seed" behalten, um den Status des rohen Iterators beizubehalten und ihn später zu verwenden?
- Kann ich 2 Iter oder 2
itertools.tee
tauschen?
Vielen Dank!
Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, aber ich __think__ Sie sollten den ursprünglichen Iterator nicht berühren, nachdem Sie 'itertools.tee' verwendet haben, um ihn zu multiplizieren. Sie sollten get 'n + 1'-Iteratoren von' tee' verwenden und eines davon als das 'Original' verwenden, um 'den Status' zu verfolgen, was immer Sie damit meinen, – Kimvais