
I am trying to understand a little about the izip myself. And the iter() simply converts the result of the inverse Itertools.izip(range10(),range10()) is completed before the * operation The reason I ask is that the * operator is applied to > list(m)Ĭould you expand on what you mean by exhaust the iterators too early? Return (cut(itr, index) for (index, itr) in enumerate(t))Ī, b, c = starzip(it.izip("abc",, "xyz")) "starzip() does not allow an empty sequence as argument") Repeating your demo, you are getting the same (last) sequence twice due to However, your sample data is badly chosen.

Single line solution if I wasn't using 2.4.)īecause Python supports function definitions you only have to do it once :-) Seems like a bit of work for the inverse of izip though so I'll wait toĪnyone else has a better solution. Starzip = lambda iterables: ((tuple for tuple in itr) for i, itr in enumerate(itertools.tee(iterables))) starzip(itertools.izip(range(10), range(10))) x, y = starzip(itertools.izip(range(10), range(10))) > x, y = itertools.izip(*itertools.izip(range(10), range(10))) Me like all the pairs from the first iterator are read into memory before the But we are hitting "exhausted"īefore we ever ask for an element from the starzip2 iterators, so it looks to Up with izip, the next iterator is discarded. I believe we only get one "exhausted" because as soon as one iterator is used Unfortunately, I think this exhausts the iterators too early because it > starzip2 = lambda it: tuple() > l,m = starzip2(itertools.izip(range(10),range(10))) > l > m Satchidanand Haridas > writes: How about using iter() to get another solution like the following: X, y = starzip(itertools.izip(range(10), range(10))) Starzip(itertools.izip(range(10), range(10))) >x, y = itertools.izip(*itertools.izip(range(10), range(10))) How about using iter() to get another solution like the following: Seems like a bit of work for the inverse of izip though so I'll wait to see ifĪnyone else has a better solution. x, y = starzip(itertools.izip(range(10), range(10)))

Starzip = lambda iterables: ((tuple for tuple in itr) for i, itr inĮnumerate(itertools.tee(iterables))) starzip(itertools.izip(range(10), range(10))) Sorry to respond to myself, but after playing around with itertools for a

Steven Bethard > writes: What's the inverse of izip? Of course, I could use zip(*) or izip(*), Satchidanand Haridas (sharidas at zeomega dot com)

I want to convert an iterator of tuples into a tuple of iterators.Ī = itertools.izip(*itertools.izip(range(10),range(10) )) X, y = itertools.izip(*itertools.izip(range(10), range(10))) What's the inverse of izip? Of course, I could use zip(*) or izip(*), So I know that zip(*) is the inverse of zip(), e.g.:
