使用循环(没有numpy)在python 3中单独乘以3x4矩阵中的元素

时间:2017-03-27 03:28:29

标签: python-3.x

我试图制作一个3行乘4列的矩阵,并包含数字1-12。然后,我希望将这些数字乘以一个因子来制作新的矩阵。

def matrix(x):
    matrix=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
    new_matrix=[[x*1,x*2,x*3],[x*4,x*5,x*6],[x*7,x*8,x*9],[x*10,x*11,x*12]]
    print(new_matrix)

这种方法有效,但它不使用循环,我正在寻找一种使用循环的方法,如下所示:

 def matrix(x):
     for i in range(3):
         matrix.append([])
         for j in range(4):
             matrix[i].append(0)
             return matrix

1 个答案:

答案 0 :(得分:0)

您不需要为这样的事情使用显式循环(除非您真的想要)。列表推导是一种更有效的生成列表的方法,并且具有与for循环类似的语法:

以下是生成包含最多M * N的数字的任何MxN矩阵的理解:

def matrix(m, n):
    return [[x+1 for x in range(row * n, (row + 1) * n)] for row in range(m)]

以下是将matrix返回的嵌套列表乘以某个因子的理解:

def mult(mat, fact):
    return [[x * fact for x in row] for row in mat]

以下是您特定3x4案例的结果:

>>> m = matrix(3, 4)
>>> print(m)
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> m2 = mult(m, 2)
>>> print(m2)
[[2, 4, 6, 8], [10, 12, 14, 16], [18, 20, 22, 24]]

如果您希望像原始示例中那样交换索引,只需交换输入mn

>>> matrix(4, 3)
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
对于您传入的任何嵌套列表,

mult的工作方式相同。