首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python嵌套列表(2D数组)引用

Python嵌套列表(2D数组)引用
EN

Stack Overflow用户
提问于 2020-02-06 08:39:19
回答 2查看 520关注 0票数 1

看着我的密码..。为什么我的第一个嵌套列表(grid1)不与第二个嵌套列表(grid2)相同?为什么信息化是不同的?对于一个游戏,我想要一个4乘6的网格,每个元素的值都是'x‘,除非网格被分配给'O’。这在grid2中有效,但在grid1中不起作用。为什么引用&列表和它看起来是一样的?

代码语言:javascript
复制
#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)         

输出

代码语言:javascript
复制
[['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x']]

但是这个实现..。

代码语言:javascript
复制
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)

正确输出

代码语言:javascript
复制
[['O', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x']]

有什么区别&为什么它们是不同的?

EN

回答 2

Stack Overflow用户

发布于 2020-02-06 08:45:46

对于行[ "x“*4]*6中的grid1,'*6‘操作创建一个包含6个"x”、"x“的列表,但引用相同。这意味着更改六个"x“中的任何一个,"x”将更改其他对象,因为它们引用内存中的相同对象。

您可以构造自己的list类,该类覆盖mul(),以便在列表乘法之前深入复制列表。

票数 0
EN

Stack Overflow用户

发布于 2020-02-06 09:43:52

您可以使用列表理解:

代码语言:javascript
复制
grid3 = [ ["x"] * 4 for i in range(4) ]
grid3[0][0]="O"
print(grid3)

以更简洁的方式实现你的目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60090746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档