如何在Python 3中转置数组?

时间:2014-04-30 16:07:29

标签: arrays python-3.x transpose

我一直在扫描论坛,但还没有找到答案,我可以申请我的情况。我需要能够采用n×n数组并将其转换为Python-3。给出的例子是我将这个列表输入到函数中:

[[4,2,1],[“a”,“a”,“a”],[-1,-2,-3]]并且需要转换为:

[[4,'a', - 1],[2,'a', - 2],[1,'a', - 3]]所以基本上是垂直阅读而不是水平阅读。

我不能使用拉链或凹凸不平的东西,我必须自己动手。

在我的脑子里喋喋不休两个晚上,这是一个巨大的头痛。如果有人可以提供帮助,然后提供解释,以便我可以学习,我将不胜感激。

编辑:

我应该添加以供参考,参数变量是M.我们应该写的函数是trans(M):

4 个答案:

答案 0 :(得分:1)

单行:

def trans(M):
    return [[M[j][i] for j in range(len(M))] for i in range(len(M[0]))]

结果:

>>> M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> trans(M)
[[1, 4, 7], [2, 5, 8], [3, 6, 9]
# or for a non-square matrix:
>>> N = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
>>> trans(N)
[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]

附加说明:如果您在list comprehension上查找教程,其中一个示例实际上是矩阵数组的transposition

答案 1 :(得分:1)

这是一个适用于正方形矩阵的就地解决方案:

def trans(M):
  n = len(M)
  for i in range(n - 1):
    for j in range(i + 1, n):
      M[i][j], M[j][i] = M[j][i], M[i][j]

示例用法:

def print_matrix(M):
  for row in M:
    for ele in row:
      print(ele, end='\t')
    print()
  
M = [[4, 2, 1], ["a", "a", "a"], [-1, -2, -3]]
print('Original Matrix:')
print_matrix(M)
trans(M)
print('Transposed Matrix:')
print_matrix(M)

输出:

Original Matrix:
4   2   1
a   a   a
-1  -2  -3
Transposed Matrix:
4   a   -1
2   a   -2
1   a   -3

答案 2 :(得分:0)

该变体应适用于行长度不规则的矩阵:

m=[[3, 2, 1],
   [0, 1],
   [2, 1, 0]]

m_T = [ [row[c] for row in m if c < len(row)] for c in range(0, max([len(row) for row in m])) ]

答案 3 :(得分:0)

y=([1,2], [3,4], [5,6])

transpose=[[row[i] for row in y] for i in range(len(y[0]))]

输出是

[[1, 3, 5], [2, 4, 6]]