A Transpose/Unzip Function in Python
I have a list of tuples, where I want to unzip this list into two independent lists. I"m looking for some standardized operation in Python.
>>> l = [(1,2), (3,4), (8,9)] >>> f_xxx (l) [ [1, 3, 8], [2, 4, 9] ]
I"m looking for a succinct and pythonic way to achieve this.
Basically, I"m hunting for inverse operation of
>>> l = [(1,2), (3,4), (8,9)] >>> list(zip(*l)) [(1, 3, 8), (2, 4, 9)]
zip() function pairs up the elements from all inputs, starting with the first values, then the second, etc. By using
*l you apply all tuples in
l as separate arguments to the
zip() function, so
zip() pairs up
8 first, then
9. Those happen to correspond nicely with the columns, or the transposition of
zip() produces tuples; if you must have mutable list objects, just
map() the tuples to lists or use a list comprehension to produce a list of lists:
map(list, zip(*l)) # keep it a generator [list(t) for t in zip(*l)] # consume the zip generator into a list of lists