Most pythonic way to convert tuple list

I need to convert a list of tuples to a style:

[(day1, name1, value1), (day2, name2, value2), (day3, name3, value3)]... etc 

in

 [day1, day2, day3], [name1, name2, name3], [value1, value2, value3]... etc 

I am currently doing this:

 vals is the list of tuples day = [] name = [] value = [] for val in vals: day.append(val[0]) name.append(val[1]) value.append(val[2]) 

It works, but it looks pretty ugly ... I wonder if there is a more "pythonic" way to achieve the same result

+4
source share
1 answer

List explanation with zip() function is easiest:

 [list(t) for t in zip(*list_of_tuples)] 

This applies to each individual tuple as a zip() argument using the *arguments extension syntax. zip() then combines each value from each tuple into new tuples.

Demo:

 >>> list_of_tuples = [('day1', 'name1', 'value1'), ('day2', 'name2', 'value2'), ('day3', 'name3', 'value3')] >>> [list(t) for t in zip(*list_of_tuples)] [['day1', 'day2', 'day3'], ['name1', 'name2', 'name3'], ['value1', 'value2', 'value3']] 

This forces the output to use lists; you can just use direct zip() if you only need 3 digit combos:

 >>> zip(*list_of_tuples) [('day1', 'day2', 'day3'), ('name1', 'name2', 'name3'), ('value1', 'value2', 'value3')] 

In Python 3, use list(zip(*list_of_tuples)) or just skip the output.

+10
source

Source: https://habr.com/ru/post/1500731/


All Articles