# Converting a flat list to a list of tuples

Bengt Richter bokr at oz.net
Tue Nov 22 22:13:28 CET 2005

```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)]

Regards,
Bengt Richter

```