循环遍历python中的多维数组

时间:2012-09-03 07:51:17

标签: python

我如何实现第9行和第10行,即python中的两个for循环

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
]

newMatrix = []

for (i=0; i < len(matrix); i++):
    for (j=0; j < len(matrix[i]); j++):
        newMatrix[j][i] = matrix[i][j]
print newMatrix

PS:我知道我可以做[[row[i] for row in matrix] for i in range(4)]但我只能使用for循环

4 个答案:

答案 0 :(得分:2)

使用range(或xrange)。

for i in range(len(matrix)):
  for j in range(len(matrix[i])):

仅供参考,分配到newMatrix[i][j]将失败,因为newMatrix为空list。您需要为每一行向list添加一个新的空newMatrix,然后在每次迭代中将新值附加到该列表。

答案 1 :(得分:1)

您可以使用enumerate() function循环遍历矩阵值并为您提供索引:

newMatrix = [[0] * len(matrix) for _ in xrange(len(matrix[0]))]
for i, row in enumerate(matrix):
    for j, value in enumerate(row):
        newMatrix[j][i] = value

输出:

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

因为您直接在新矩阵中寻址行和列,所以您需要首先使用空值初始化该新矩阵。我的示例第一行的列表理解为您做到了这一点。在给定输入矩阵大小( x y <)的情况下,它会创建一个大小为( y x )的新矩阵/ em>的)。

或者,您可以通过(ab)使用zip function完全避免显式循环:

newMatrix = zip(*matrix)

获取matrix的每一行,并将这些行中的每一列分组为新行。

在一般情况下,python for构造循环序列。 range()xrange()函数可以为您生成数字序列,这些函数生成一个数字序列,其方式与C或JavaScript中的for循环产生的方式大致相同:

>>> for i in range(5):
>>>   print i,
0 1 2 3 4

但是构造比C风格的for构造强大得多。在大多数这样的循环中,你的目标是为某些序列提供索引,python构造绕过索引并直接转到序列中的值。

答案 2 :(得分:1)

如果您正在使用Python进行任何类型的矩阵运算,只需将其他内容添加到答案的混合中,请考虑使用numpy

>>> import numpy
>>> matrix = numpy.matrix([
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12]
... ])

转置非常简单:

>>> matrix.transpose()
matrix([[ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11],
       [ 4,  8, 12]])

答案 3 :(得分:1)

如果我理解正确,你想要做的是matrix transposition,可以这样做:

 zip(*matrix)