Python 调用时函数的重复
下面是我的代码Python 调用时函数的重复,python,function,Python,Function,下面是我的代码 n = 4 m = 4 figures = [1,2,2] def almostTetris(n, m, figures): grid = [[0] * m] * n def shape1(count): for i in range(n): for j in range(m): if grid[i][j] == 0: print(grid[i][j
n = 4
m = 4
figures = [1,2,2]
def almostTetris(n, m, figures):
grid = [[0] * m] * n
def shape1(count):
for i in range(n):
for j in range(m):
if grid[i][j] == 0:
print(grid[i][j])
print(grid[1][0])
print(grid[2][0])
print(grid[3][0])
grid[i][j] = count
print(grid[i][j])
print(grid[1][0])
print(grid[2][0])
print(grid[3][0])
return
def shape2(count):
for i in range(n):
for j in range(m - 2):
if grid[i][j] == 0 and grid[i][j + 1] == 0 and grid[i][j + 2] == 0:
grid[i][j] = grid[i][j + 1] = grid[i][j + 2] = count
return
for i in range(len(figures)):
if figures[i] == 1:
shape1(i + 1)
elif figures[i] == 2:
shape2(i + 1)
return grid
print(almostTetris(n, m, figures))
这是我打印出来的:
0
0
0
0
1.
1.
1.
1.
[[1, 2, 2, 2], [1, 2, 2, 2], [1, 2, 2, 2], [1, 2, 2, 2]]
我的问题是grid[i][j]=count如何将第一列中的所有数字转换为1(count的值)?
我想因为I
和j
都是0,所以只有第一个元素会变为1。当我第一次学习python时,我也很难做到这一点。问题就在这方面
grid=[[0]*m]*n
因为它不会创建0的nxm网格,
它实际上复制对象:[[0]*m]
n次以创建2d数组。因此,如果您更改此对象中的一个值,则其他n个对象实例也会被编辑。试着做一些类似的事情
grid=[[0]*m表示范围内(n)]
问题就在这里:grid=[[0]*m]*n
,因为它创建了对同一列表的一组引用,而不是您所期望的新列表。使用列表理解代替。哇,非常感谢。。。我只是无法理解这个。。。