2014-01-29 3 views
13

Мне нравится перемещать каждый элемент в этом списке в другой вложенный список, может кто-нибудь мне помочь?Переместить вложенный список в python

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']] 

В конце концов, я сделаю список, как это:

[['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

В случае, если список списков не квадрат, вы можете найти решение здесь: http://stackoverflow.com/a/38815389/2521204 – 1man

ответ

29

Используйте zip с * и 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']] 

Обратите внимание, что map возвращает объект карты в Python 3, поэтому там вам понадобится list(map(list, zip(*a)))

Использование list comprehension с zip(*...), это будет работать как и в Python 2 и 3.

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

NumPy путь:

>>> 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

вау, это было довольно легко, спасибо. Я пробовал сделать цикл, но это приятное решение. – Robert

1

Через список понимания:

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

@nietonfir. Вы здесь не правы. Это ответ. Чтобы критиковать или запрашивать разъяснения по этому поводу, вы можете сбрасывать или комментировать. – sashkello

0

Вы также можете сделать:

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

Вы можете также использовать

a= np.array(a).transpose().tolist() 
Смежные вопросы