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.

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]

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.