gpt4 book ai didi

python - 对列表和多次迭代的误解

转载 作者:太空宇宙 更新时间:2023-11-03 20:09:31 26 4
gpt4 key购买 nike

我正在高中上 Python 编程类(class),我遇到了一些奇怪的事情。我认为这只是我的错误,但我不知道为什么输入时:

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]]

在寻找制作网格的方法后我变得很好奇,我的项目是一个必须用网格制作的粗糙战舰游戏

我认为 append 的第一个列表中只有一个对象是合乎逻辑的,因为它是第一次迭代,因此“x”的长度将等于 1 而不是 4。

最佳答案

I think it would be logical the first list appended would only have one object in it since it was iterating for the first time, therefore the length of "x" would be equal to 1 and not 4.

append 的第一个列表中只有一个0。但它与您在循环的下一次迭代中调用 .append(0) 的列表相同。

您的代码当前做什么?

  • 您创建两个列表:xy
  • 然后循环 4 次
    • x 中的列表追加一个零
    • 将列表x append 到列表L

结果,你得到了完全相同的列表x,其中有四次四个零L

您真正希望代码执行的操作

  • 您创建两个列表:xy
  • 然后循环 4 次
    • x 中的列表追加一个零
    • 将列表x副本 append 到列表L

您的代码应该是什么样子

在 Python 中复制列表有多种方法:

  • slicing :
    >>> x = [1,2,3]
    >>> y = x[:]
    >>> x.append(4)
    >>> y
    [1, 2, 3]
  • copy method of any mutable sequence type (仅限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]]

关于python - 对列表和多次迭代的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58781980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com