在二维数组(python中的矩阵)中为for循环赋值



我的代码是这样的。我想添加10-99范围内的随机数。当代码运行时,就会出现这样的问题。所有四条线都变为相同。我也试着用input给出数字,但在这段时间里,结果也是一样的。只有第一个给定的四个整数取所有四行。

import random
mx = [[0]*4] * 4
for i in range(4):
for j in range(4):
num = random.randint(10,99)
mx[i][j] = num
#printing
for i in range(4):
for j in range(4):
print(mx[i][j],sep=" ",end=" ")
print()

它给出了这个问题

C:UsersUsernameDesktop>python file.py
89 98 99 67
89 98 99 67
89 98 99 67
89 98 99 67

源代码中有什么问题

目标是只提供4x4阵列,还是同时提供演示?该数组可以在这样的列表理解中实现:

[print([random.randint(10,99) for x in range(4)]) for y in range(4)]

输出:

[15, 57, 37, 90]
[40, 58, 39, 67]
[97, 38, 84, 86]
[14, 72, 50, 13]

执行mx = [[0]*4] * 4时,不是创建一个包含零的列表列表。相反,您正在创建一个具有对同一列表的引用的列表。对其中一个列表所做的任何更改都将对所有列表进行更改。

查看相关问题:
1。子列表中意外反映的列表更改列表
2。如何在python中创建多个空列表
3.如何在Python中创建空列表的列表或元组?

对于2D列表,确实没有一种"干净"的方法。我建议使用numpy.zeros或使用

mx = [[0, 0, 0, 0], 
[0, 0, 0, 0], 
[0, 0, 0, 0], 
[0, 0, 0, 0]]

mx = [[0]*4] * 4将只复制相同的列表4次。它不会像你想要的那样创建4个单独的列表。你可以在下面的代码中尝试这样的方法,在列表中创建单个列表。

mx = [None] * 4
for i in range(4):
mx[i] = [None] * 4
for j in range(5):
num = random.randint(10,99)
mx[i][j] = num

最新更新