Ответ 1
Используйте zip(*list)
:
>>> l = [(1,2), (3,4), (8,9)]
>>> list(zip(*l))
[(1, 3, 8), (2, 4, 9)]
Функция zip()
объединяет элементы из всех входных данных, начиная с первых значений, затем второго и т.д. Используя *l
вы применяете все кортежи в l
как отдельные аргументы к функции zip()
, поэтому пары zip()
до 1
с 3
сначала 8
, затем 2
с 4
и 9
. Случается, что они хорошо соответствуют столбцам или транспозиции l
.
zip()
создает кортежи; если у вас должны быть изменяемые объекты списков, просто map()
кортежи со списками или используйте понимание списков для создания списка списков:
map(list, zip(*l)) # keep it a generator
[list(t) for t in zip(*l)] # consume the zip generator into a list of lists