在二维数组中使用 for 循环赋值(python 中的矩阵)
Assignning value with for loop in two dimensional arrays (matrixes in python)
我的代码是这样的。我想在 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
源代码有什么问题?
当您执行 mx = [[0]*4] * 4
时,您 不是 创建一个包含零的列表列表。相反,您正在创建一个包含对同一列表的引用的列表。对其中一个列表所做的任何更改都会对所有列表进行更改。
看看相关问题:
1. List of lists changes reflected across sublists unexpectedly
2. How can I make multiple empty lists in python?
3. How to create a list or tuple of empty lists in Python?
对于二维列表,确实没有 'clean' 的方法。我建议使用 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
目标是只给你 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]
我的代码是这样的。我想在 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
源代码有什么问题?
当您执行 mx = [[0]*4] * 4
时,您 不是 创建一个包含零的列表列表。相反,您正在创建一个包含对同一列表的引用的列表。对其中一个列表所做的任何更改都会对所有列表进行更改。
看看相关问题:
1. List of lists changes reflected across sublists unexpectedly
2. How can I make multiple empty lists in python?
3. How to create a list or tuple of empty lists in Python?
对于二维列表,确实没有 'clean' 的方法。我建议使用 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
目标是只给你 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]