Converting a flat list to a list of tuples

bonono at gmail.com bonono at gmail.com
Tue Nov 22 19:32:25 EST 2005


Bengt Richter wrote:
> On 22 Nov 2005 07:42:31 -0800, "George Sakkis" <gsakkis at rutgers.edu> 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)))




More information about the Python-list mailing list