我正在尝试为python创建一个矩阵转置函数,但是我似乎不能让它工作。假设我有
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
我想让我的函数
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
换句话说,如果我把这个二维数组打印成列和行,我希望行变成列,列变成行。
到目前为止,我做了这个,但它不起作用
def matrixTranspose(anArray):
transposed = [None]*len(anArray[0])
for t in range(len(anArray)):
for tt in range(len(anArray[t])):
transposed[t] = [None]*len(anArray)
transposed[t][tt] = anArray[tt][t]
print transposed
发布于 2011-02-09 03:41:39
Python 2:
>>> theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
>>> zip(*theArray)
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
Python 3:
>>> [*zip(*theArray)]
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
发布于 2012-07-09 07:05:21
>>> theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
>>> [list(i) for i in zip(*theArray)]
[['a', 'd', 'g'], ['b', 'e', 'h'], ['c', 'f', 'i']]
列表生成器创建具有列表项而不是元组的新的2d数组。
发布于 2011-02-09 04:38:08
如果行不相等,也可以使用map
>>> uneven = [['a','b','c'],['d','e'],['g','h','i']]
>>> map(None,*uneven)
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', None, 'i')]
编辑:在Python3中,map
的功能发生了变化,可以使用itertools.zip_longest
:
>>> import itertools
>>> uneven = [['a','b','c'],['d','e'],['g','h','i']]
>>> list(itertools.zip_longest(*uneven))
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', None, 'i')]
https://stackoverflow.com/questions/4937491
复制相似问题