2016-04-14 13 views

risposta

10

Utilizzare un zip e disimballaggio operatore.

>>> l = [['x1','y1'], ['x2','y2']] 
>>> zip(*l) 
[('x1', 'x2'), ('y1', 'y2')] 
+0

@Bhargav Rao: Puoi spiegare come '*' funziona o fornisci alcuni collegamenti che spiegano '*'? –

+0

@Vivek Puoi trovare ulteriori informazioni sull'operatore '*' qui https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists –

+2

A parte il fatto che questa domanda trae vantaggio da 'zip' restituendo una lista di tuple, più in generale 'zip (* X)' può essere considerata come la trasposizione matrice di 'X'. Il che è utile alle persone che hanno fatto un sacco di algebra lineare e quindi penserebbero naturalmente al riordinamento richiesto dall'interrogante come trasposizione. –

2

Gestito più caso in dare test case.

Se ci sono articoli in lista che hanno lunghezza diversa.

In [19]: a 
Out[19]: [[1, 2], [3, 4], [5, 6], [7, 8, 9]] 

In [20]: import itertools 

In [21]: b = itertools.izip_longest(*a) 

In [22]: list(b) 
Out[22]: [(1, 3, 5, 7), (2, 4, 6, 8), (None, None, None, 9)] 
+0

@BhargavRao: risposta aggiornata, e chi ha votato la risposta può anche controllare e farmi sapere se c'è qualche problema :) –