tee#
Функция tee создает несколько независимых итераторов на основе исходных данных:
itertools.tee(iterable, n=2)
Пример использования:
In [30]: data = [1,2,3,4,5,6]
In [31]: data_iter = iter(data)
In [32]: duplicate_1, duplicate_2 = tee(data_iter)
In [33]: list(duplicate_1)
Out[33]: [1, 2, 3, 4, 5, 6]
In [34]: list(duplicate_2)
Out[34]: [1, 2, 3, 4, 5, 6]
Важная особенность tee - исходный итератор лучше не использовать, иначе полученные итераторы начнут перебор не с начала:
In [35]: data_iter = iter(data)
In [36]: duplicate_1, duplicate_2 = tee(data_iter)
In [37]: next(data_iter)
Out[37]: 1
In [38]: next(data_iter)
Out[38]: 2
In [39]: list(duplicate_1)
Out[39]: [3, 4, 5, 6]
In [40]: list(duplicate_2)
Out[40]: [3, 4, 5, 6]
При этом перебор одной копии, не влияет на вторую:
In [41]: data_iter = iter(data)
In [42]: duplicate_1, duplicate_2 = tee(data_iter)
In [43]: next(duplicate_1)
Out[43]: 1
In [44]: next(duplicate_1)
Out[44]: 2
In [45]: list(duplicate_1)
Out[45]: [3, 4, 5, 6]
In [46]: list(duplicate_2)
Out[46]: [1, 2, 3, 4, 5, 6]