List transpose method

Paul Sidorsky paulsid at home.com
Thu Nov 1 18:12:22 EST 2001


Tom Harris wrote:

> Suppose I have a list like ((1,2), (3,4), (5,6)). Can some functional guru
> tell me a one liner to transpose this to the form ((1,3,5),(2,4,6))? I can
> only come up with an ugly multiliner.

apply(zip, a) seems to work for most cases:

>>> a = ((1,2), (3,4), (5,6))
>>> apply(zip, a)
[(1, 3, 5), (2, 4, 6)]
>>> a = ((1,3,5), (2,4,6))
>>> apply(zip, a)
[(1, 2), (3, 4), (5, 6)]
>>> a = ("Hello world", "Goodbye all")
>>> apply(zip, a)
[('H', 'G'), ('e', 'o'), ('l', 'o'), ('l', 'd'), ('o', 'b'), 
(' ', 'y'), ('w', 'e'), ('o', ' '), ('r', 'a'), ('l', 'l'), ('d', 'l')]
>>> a = ((1,2,3,4),(5,6,7,8),(9,10,11,12))
>>> apply(zip, a)
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
>>> a = [[1, 2, 3, 4]]
>>> apply(zip, a)
[(1,), (2,), (3,), (4,)]
>>> a = ((1, 2, 3), (4, 5))
>>> apply(zip, a)
[(1, 4), (2, 5)]

-- 
======================================================================
Paul Sidorsky                                          Calgary, Canada
paulsid at home.com                      http://members.home.net/paulsid/




More information about the Python-list mailing list