Como compactar listas em uma lista

92

Eu quero compactar a seguinte lista de listas:

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

Isso pode ser alcançado com a zipimplementação atual apenas se a lista for dividida em componentes individuais:

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

Não consigo descobrir como dividir a lista e passar os elementos individuais para zip. É preferida uma solução funcional.

Vijay Mathew
fonte

Respostas:

148

Experimente isto:

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

Consulte Descompactando Listas de Argumentos :

A situação inversa ocorre quando os argumentos já estão em uma lista ou tupla, mas precisam ser descompactados para uma chamada de função que requer argumentos posicionais separados. Por exemplo, a função interna range () espera argumentos de início e parada separados. Se eles não estiverem disponíveis separadamente, escreva a chamada de função com o operador * para descompactar os argumentos de uma lista ou tupla:

>>> 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]
Mark Byers
fonte
4
Consulte docs.python.org/tutorial/… para saber como isso funciona.
ameer
2
Gostaria de ver uma alternativa, caso você tenha uma lista com um milhão de entradas. Pode não ser uma boa ideia descompactar um milhão de itens em uma chamada de função ...
Blixt