为了账号安全,请及时绑定邮箱和手机立即绑定

嵌套列表索引

嵌套列表索引

翻翻过去那场雪 2019-06-26 17:40:39
在代码中使用Python中的嵌套列表时,我遇到了一些问题。基本上,我有一个包含所有0值的2D列表,我想在一个循环中更新列表值。然而,Python并没有产生我想要的结果。有什么我误解的吗range()Python列表索引呢?some_list = 4 * [(4 * [0])]for i in range(3):     for j in range(3):         some_list[i+1][j+1] = 1for i in range(4):     print(some_list[i])我预期的结果是:[0, 0, 0, 0][0, 1, 1, 1][0, 1, 1, 1][0, 1, 1, 1]但是Python的实际结果是:[0, 1, 1, 1][0, 1, 1, 1][0, 1, 1, 1][0, 1, 1, 1]这里发生了什么事?嵌套列表索引
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

实际上,列表中的所有对象都是相同的,因此更改一个也会改变其他对象:

In [151]: some_list = 4 * [(4 * [0])]  In [152]: [id(x) for x in some_list]Out[152]: [148641452, 148641452, 148641452, 148641452]In [160]: some_list[0][1]=5  #you think you changed the list at index 0 hereIn [161]: some_listOut[161]: [[0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0]]  #but all lists are changed

以如下方式创建列表:

In [156]: some_list=[[0]*4 for _ in range(4)]In [157]: some_listOut[157]: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]In [158]: [id(x) for x in some_list]Out[158]: [148255436, 148695180, 148258380, 148255852]In [163]: some_list[0][1]=5In [164]: some_listOut[164]: [[0, 5, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]  #works fine in this case


查看完整回答
反对 回复 2019-06-26
  • 2 回答
  • 0 关注
  • 767 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信