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



More information about the Python-list mailing list