Come comprimere elenchi in un elenco


91

Voglio comprimere il seguente elenco di elenchi:

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

Ciò potrebbe essere ottenuto con l'attuale zipimplementazione solo se l'elenco è suddiviso in singoli componenti:

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

Non riesco a capire come dividere l'elenco e passare i singoli elementi a zip. È preferibile una soluzione funzionale.

Risposte:


146

Prova questo:

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

Vedere Disimballaggio degli elenchi di argomenti :

La situazione inversa si verifica quando gli argomenti sono già in una lista o in una tupla ma devono essere decompressi per una chiamata di funzione che richiede argomenti posizionali separati. Ad esempio, la funzione incorporata range () prevede argomenti di avvio e arresto separati. Se non sono disponibili separatamente, scrivi la chiamata alla funzione con l'operatore * per decomprimere gli argomenti da una lista o 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
Vedi docs.python.org/tutorial/… per come funziona.
ameer

2
Mi piacerebbe vedere un'alternativa nel caso tu abbia un elenco con un milione di voci. Potrebbe non essere una buona idea decomprimere un milione di elementi in una chiamata di funzione ...
Blixt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.