import random
def initGrid():
global cell_array
for x in range(1, mx - 1):
for y in range(1, my - 1):
if random.random() < 0.3:
cell_array[x][y] = 1
print(cell_array[x][y], end='')
print()
mx = 21
my = 17
cell_array = [[0] * my] * mx
initGrid()
为什么会出现这个?
000000000010110
000110000110110
010111000110110
110111010110110
110111010111110
110111111111110
110111111111110
110111111111110
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
cell_array = [[0] * my] * mx
是一个数组,其中所有行都相同。cell_array = [[0] * my for _ in range(mx)]
- 这是一个行不同的数组。打印行不同,因为您在不同时间打印同一行。新的单位一直被添加到其中。
发电机没问题。
我会这样解决问题:
尝试稍微改变一下程序:
哎呀:
问题在于该表达式
[[0] * my] * mx
创建了指向同一列表的指针列表。也就是说,通过更改,cell_array[x][y]
您可以同时更改所有行中的第 y 个元素。要检查,请键入
获得相同的行。
您需要为矩阵中的每一行创建一个单独的初始值设定项。