我试图制作一个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
答案 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]]
如果您希望像原始示例中那样交换索引,只需交换输入m
和n
:
>>> matrix(4, 3)
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
对于您传入的任何嵌套列表, mult
的工作方式相同。