我一直在扫描论坛,但还没有找到答案,我可以申请我的情况。我需要能够采用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):
答案 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]]