python - 对列表和多次迭代的误解
问题描述
我在高中上 Python 编程课,我遇到了一些奇怪的事情。我认为这只是我的错误,但输入时我不知道为什么:
L = []
x = []
for i in range(4):
x.append(0)
L.append(x)
print (L)
输出显示:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
而不是这个:
[[0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
搜索了网格的制作方法后,我变得好奇,我的项目是一个粗糙的战舰游戏,我必须用网格制作
我认为附加的第一个列表中只有一个对象是合乎逻辑的,因为它是第一次迭代,因此“x”的长度将等于 1 而不是 4。
解决方案
我认为附加的第一个列表中只有一个对象是合乎逻辑的,因为它是第一次迭代,因此“x”的长度将等于 1 而不是 4。
附加的第一个列表中只有一个0
。但它与您.append(0)
在循环的下一次迭代中调用的列表相同。
您的代码目前在做什么?
- 您创建两个列表,
x
并且y
. - 然后你循环4次
- 将零添加到列表中
x
- 将列表附加
x
到列表L
- 将零添加到列表中
结果,您在列表中x
有四次四个零的相同列表L
你真正想要你的代码做什么
- 您创建两个列表,
x
并且y
. - 然后你循环4次
- 将零添加到列表中
x
- 将列表的副本附加
x
到列表L
- 将零添加到列表中
你的代码应该是什么样子
在 Python 中有几种方法可以复制列表:
- 切片:
_
>>> x = [1,2,3] >>> y = x[:] >>> x.append(4) >>> y [1, 2, 3]
- 使用
copy
任何可变序列类型的方法(仅限 Python3):>>> x = [1,2,3] >>> y = x.copy() >>> x.append(4) >>> y [1, 2, 3]
- 使用
list()
构造函数:>>> x = [1,2,3] >>> y = list(x) >>> x.append(4) >>> y [1, 2, 3]
所以你的代码可能看起来像:
x = []
L = []
for _ in range(4):
x.append(0)
L.append(x[:])
print(L)
输出:
[[0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
推荐阅读
- geometry - (Godot 引擎)在第一个 + 最后一个点上复制 Line2D 的关节功能
- r - 检查 GAM 中的过度分散时出现 rootogram() 错误
- reactjs - Bootstrap component not showing properly in react project
- node.js - 如何从nodejs计算活动目录的所有用户?
- python - 添加反应时如何添加角色?不和谐.py
- reactjs - 即使在添加 .htaccess 之后,反应应用程序中的 Apache 错误 404
- google-apps-script - 如何将 IMPORTHTML 用于 URL 数组
- c++ - 如何在 Debian 10 上为 Onboard-SDK 项目创建 CMakeList.txt
- r - 根据 expand.grid() 给出的索引从 data.frame() 中选择特定值
- yarnpkg - Mac OS 上的纱线缓存大小太大