看着我的密码..。为什么我的第一个嵌套列表(grid1)不与第二个嵌套列表(grid2)相同?为什么信息化是不同的?对于一个游戏,我想要一个4乘6的网格,每个元素的值都是'x‘,除非网格被分配给'O’。这在grid2中有效,但在grid1中不起作用。为什么引用&列表和它看起来是一样的?
#setup grid1 (4x6 2D nested list) populating x's in all positions
grid1 =[["x"]*4]*6]
grid1[0][0]="O" #assign row 1, column 1 'O'
print(grid1) 输出
[['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x']]但是这个实现..。
grid2 = []
for row in range(0,6):
grid2.append([])
for column in range(0,4):
grid2[row].append("x")
grid2[0][0]="O"
print(grid2)正确输出
[['O', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x']]有什么区别&为什么它们是不同的?
发布于 2020-02-06 08:45:46
对于行[ "x“*4]*6中的grid1,'*6‘操作创建一个包含6个"x”、"x“的列表,但引用相同。这意味着更改六个"x“中的任何一个,"x”将更改其他对象,因为它们引用内存中的相同对象。
您可以构造自己的list类,该类覆盖mul(),以便在列表乘法之前深入复制列表。
发布于 2020-02-06 09:43:52
您可以使用列表理解:
grid3 = [ ["x"] * 4 for i in range(4) ]
grid3[0][0]="O"
print(grid3)以更简洁的方式实现你的目标。
https://stackoverflow.com/questions/60090746
复制相似问题