2014-01-29 43 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 comprehensionzip(*...),这将作为工作在两个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()