On 22 Nov 2005 16:32:25 -0800, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
> >Bengt Richter wrote: >> On 22 Nov 2005 07:42:31 -0800, "George Sakkis" <[EMAIL PROTECTED]> wrote: >> >> >"Laurent Rahuel" wrote: >> > >> >> Hi, >> >> >> >> newList = zip(aList[::2], aList[1::2]) >> >> newList >> >> [('a', 1), ('b', 2), ('c', 3)] >> >> >> >> Regards, >> >> >> >> Laurent >> > >> >Or if aList can get very large and/or the conversion has to be >> >performed many times: >> > >> >from itertools import islice >> >newList = zip(islice(aList,0,None,2), islice(aList,1,None,2)) >> > >> Or, if you want to include fractional groups at the end >> >> >>> aList = ['a', 1, 'b', 2, 'c', 3] >> >>> from itertools import groupby >> >>> def grouper(n): >> ... def git(): >> ... while True: >> ... for _ in xrange(n): yield 0 >> ... for _ in xrange(n): yield 1 >> ... git = git() >> ... def grouper(_): return git.next() >> ... return grouper >> ... >> >>> [tuple(g) for _, g in groupby(aList, grouper(2))] >> [('a', 1), ('b', 2), ('c', 3)] >> >>> [tuple(g) for _, g in groupby(aList, grouper(3))] >> [('a', 1, 'b'), (2, 'c', 3)] >> >>> [tuple(g) for _, g in groupby(aList, grouper(4))] >> [('a', 1, 'b', 2), ('c', 3)] >> >Personally, I would like to see it as [('a',1,'b',2), ('c',3, >None,None)], as a list of tuple of equal length is easier to be dealt >with. > >i = iter(aList) >zip(i,chain(i,repeat(None)), >chain(i,repeat(None)),chain(i,repeat(None))) > Yes, but OTOH you might like to loop and catch ValueError when/if the last tuple doesn't unpack properly. Then you don't have to worry about None vs a sentinel :-) Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list