[我正在读高中时,学习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
。x
中的列表x
追加到列表L
结果,您拥有与列表x
相同的列表L
,其中四个零四次出现在列表x
中
y
和x
。x
中的列表L
的有几种在Python中复制列表的方法:
>>> x = [1,2,3]
>>> y = x[:]
>>> x.append(4)
>>> y
[1, 2, 3]
:copy
method of any mutable sequence type
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]]