在二维数组中使用for循环分配值(Python中的矩阵)

问题描述 投票:0回答:3

我的代码是这个。我想在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:\Users\Username\Desktop>python file.py
89 98 99 67
89 98 99 67
89 98 99 67
89 98 99 67

源代码有什么问题?

python python-3.x matrix multidimensional-array matrix-multiplication
3个回答
0
投票

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

看看相关问题:1.List of lists changes reflected across sublists unexpectedly2.How can I make multiple empty lists in python?3. How to create a list or tuple of empty lists in Python?

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

 mx = [[0, 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

0
投票

目标是只为您提供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]
© www.soinside.com 2019 - 2024. All rights reserved.