Как заархивировать списки в список

92

Я хочу заархивировать следующий список списков:

>>> zip([[1,2], [3,4], [5,6]])
[[1,3,5], [2,4,6]]

Этого можно достичь с помощью текущей zipреализации, только если список разделен на отдельные компоненты:

>>> zip([1,2], [3,4], [5,6])
   (1, 3, 5), (2, 4, 6)]

Не могу понять, как разбить список и передать отдельные элементы zip. Функциональное решение предпочтительнее.

Виджей Мэтью
источник

Ответы:

146

Попробуй это:

>>> zip(*[[1,2], [3,4], [5,6]])
[(1, 3, 5), (2, 4, 6)]

См. Распаковка списков аргументов :

Обратная ситуация возникает, когда аргументы уже находятся в списке или кортеже, но их необходимо распаковать для вызова функции, требующего отдельных позиционных аргументов. Например, встроенная функция range () ожидает отдельных аргументов запуска и остановки. Если они недоступны по отдельности, напишите вызов функции с * -оператором, чтобы распаковать аргументы из списка или кортежа:

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]
Марк Байерс
источник
4
См. Docs.python.org/tutorial/…, чтобы узнать, как это работает.
Ameer
2
Хотелось бы увидеть альтернативу на случай, если у вас есть список из миллиона записей. Возможно, не стоит распаковывать миллион элементов в вызове функции ...
Бликст