Форум сайта python.su
У меня есть итератор
In [16]: import itertools
In [17]: from copy import deepcopy
In [18]: a=[0,1,2,3]
In [19]: b=[9,8,7,6]
In [20]: c=it.chain(a,b)
In [21]: d=deepcopy(c)
In [22]: id(c), id(d)
Out[22]: (140332818554768, 140332818554576)
In [23]: list(c)
Out[23]: [0, 1, 2, 3, 9, 8, 7, 6]
In [24]: list(d)
Out[24]: []
Офлайн
Нет, нельзя.
Более того, ваше пожелание идеологически неверное, потому что
>>> iterable = range(10)
>>> i = iter(iterable)
>>> i is iter(i)
True
Офлайн
Андрей СветловМожет просто вопрос не правильно сформулирован, судя по примеру, топикастеру нужна возможность “пройти” по итератору более одного раза, если это так, то функция tee из itertools вполне может помочь
Нет, нельзя.
>>> import itertools
>>> a=[0,1,2,3]
>>> b=[9,8,7,6]
>>> c, d = itertools.tee(itertools.chain(a, b))
>>> list(c)
[0, 1, 2, 3, 9, 8, 7, 6]
>>> list(d)
[0, 1, 2, 3, 9, 8, 7, 6]
Отредактировано (Апрель 2, 2010 02:51:00)
Офлайн
какой вообще смысл копирования итератора? О_о'
Офлайн
pyuserДада! Именно это и хотелось.
Может просто вопрос не правильно сформулирован, судя по примеру, топикастеру нужна возможность “пройти” по итератору более одного раза, если это так, то функция tee из itertools вполне может помочь
Офлайн
А что мешает повторно выполнить chain(a, b)? Это ведь не требует много времени. Кроме того сами списки никуда не деваются.
Офлайн
GriffonИмеется объект, представляющий собой контейнер для цепочки итераторов.
А что мешает повторно выполнить chain(a, b)? Это ведь не требует много времени. Кроме того сами списки никуда не деваются.
a = xrange(1000)
b = MySuperClass(a)
b.imap(lambda x: x**2).ifilter(lambda x: x%2!=0).ienumerate()
и тд. и тп.
Офлайн
Может добавить метод __copy__?
http://www.python.org/dev/peps/pep-0323/
Офлайн
GriffonМетод всёравно должен будет копировать итератор.
Может добавить метод __copy__?
Офлайн
Это - правильно.
Офлайн