2010-11-06 14 views
60

voglio zip il seguente elenco di liste:Come zip liste in una lista

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

Ciò potrebbe essere realizzato con l'attuale zip applicazione solo se l'elenco è suddiviso in singoli componenti:

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

Impossibile capire come dividere l'elenco e passare i singoli elementi a zip. Una soluzione funzionale è preferita.

risposta

94

Prova questo:

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

Vedi Unpacking Argument Lists:

La situazione inversa si verifica quando gli argomenti sono già in una lista o tupla, ma devono essere spacchettato per una chiamata di funzione che richiede argomenti posizionali separati . Ad esempio, la funzione built-in range() prevede argomenti separati di avvio e arresto. Se non sono disponibili separatamente, prego scrivere la chiamata di funzione con l'* -operator per decomprimere gli argomenti di 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] 
+3

Vedi http://docs.python.org/tutorial/controlflow. html # unpacking-argument-lists per come funziona. – ameer

+0

@ameer: ​​Grazie, aggiunto. –

+1

Questa è una delle mie funzionalità python sottovalutate preferite. Non spesso utile, ma così conveniente quando ne hai bisogno! – fmark

Problemi correlati