2014-01-29 13 views
13

Ich mag es, jedes Element in dieser Liste in eine andere verschachtelte Liste zu verschieben. Könnte mir jemand helfen?Verschachtelte Liste in Python transponieren

a = [['AAA', '1', '1', '10', '92'], ['BBB', '262', '56', '238', '142'], ['CCC', '86', '84', '149', '30'], ['DDD', '48', '362', '205', '237'], ['EEE', '8', '33', '96', '336'], ['FFF', '39', '82', '89', '140'], ['GGG', '170', '296', '223', '210'], ['HHH', '16', '40', '65', '50'], ['III', '4', '3', '5', '2']] 

Am Ende werde ich Liste wie folgt machen:

[['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF'.....], 
['1', '262', '86', '48', '8', '39', ...], 
['1', '56', '84', '362', '33', '82', ...], 
['10', '238', '149', '205', '96', '89', ...], 
... 
...] 
+0

Falls Sie Liste von Listen ist nicht quadratisch verwenden, können Sie eine Lösung finden Sie hier: http://stackoverflow.com/a/38815389/2521204 – 1man

Antwort

29

Verwenden zip mit * und map:

>>> map(list, zip(*a)) 
[['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF', 'GGG', 'HHH', 'III'], 
['1', '262', '86', '48', '8', '39', '170', '16', '4'], 
['1', '56', '84', '362', '33', '82', '296', '40', '3'], 
['10', '238', '149', '205', '96', '89', '223', '65', '5'], 
['92', '142', '30', '237', '336', '140', '210', '50', '2']] 

Beachten Sie, dass map ein Map-Objekt in Python gibt 3 zurück, so Dort würden Sie list(map(list, zip(*a)))

benötigen

ein list comprehension mit zip(*...) Mit diesem Python wie 2 und 3.

[list(x) for x in zip(*a)] 

NumPy Art und Weise funktionieren würde in beiden:

>>> import numpy as np 
>>> np.array(a).T.tolist() 
[['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF', 'GGG', 'HHH', 'III'], 
['1', '262', '86', '48', '8', '39', '170', '16', '4'], 
['1', '56', '84', '362', '33', '82', '296', '40', '3'], 
['10', '238', '149', '205', '96', '89', '223', '65', '5'], 
['92', '142', '30', '237', '336', '140', '210', '50', '2']] 
+0

wow, das war ziemlich einfach, danke.Ich habe versucht für Schleife, aber das sind nette Lösung – Robert

1

Durch Liste Verständnis:

[[x[i] for x in mylist] for i in range(len(mylist[0]))] 
+0

@nietonfir Sie sind hier falsch. Dies ist eine Antwort. Um Kritik zu äußern oder um eine Klärung zu bitten, kannst du einen Kommentar abgeben. – sashkello

0

Sie könnten auch tun:

row1 = [1,2,3] 
row2 = [4,5,6] 
row3 = [7,8,9] 

matrix = [row1, row2, row3] 
trmatrix = [[row[0] for row in matrix],[row[1] for row in matrix], [row[2] for row in matrix]] 
1

Sie können auch

a= np.array(a).transpose().tolist() 
Verwandte Themen