我对这块python感到困惑。根据我的理解,它应该只做一次循环,因为列表中只有一个元素,但它似乎不断循环,我不知道为什么。我知道如何让它做我想做的事情,但我只是困惑,为什么这不起作用。谢谢追加到循环列表
y=["hello"]
for n in y:
y.append("e")
我对这块python感到困惑。根据我的理解,它应该只做一次循环,因为列表中只有一个元素,但它似乎不断循环,我不知道为什么。我知道如何让它做我想做的事情,但我只是困惑,为什么这不起作用。谢谢追加到循环列表
y=["hello"]
for n in y:
y.append("e")
您正在循环的每次迭代中向y
添加新元素。在第一次迭代时,它将看到'hello'
,然后附加一个'e'
。在第二次迭代中,它看到'e'
并追加另一个,然后在第三次看到那个,依此类推。如果您尝试删除而不是将元素附加到正在迭代的列表,则会出现类似的问题。如果你想避免这种情况,请迭代一个副本:
>>> y = ["hello"]
>>> for n in y[:]:
... y.append("e")
...
>>> y
['hello', 'e']
我才意识到这是为什么。它的,因为我不断地加入到列表中,以便会员总是一个列表中的多种元素,从而无限循环,谢谢。 – fdbdcbc
您正在解析的同一列表上追加一些数据。在每次迭代结束时添加新的元素(“e”),这就是为什么你做了一个无限循环。当你到列表`y`结束
["hello"] # 1 element, "e" will be added once ["hello", "e"] # 2 elements, "e" will be added twice ["hello", "e", "e", "e"] # 4 elements, "e" will be added 4 times ...
你的循环将结束。你不会到达列表的末尾,因为你不断添加额外的东西。当你迭代它时最好不要改变它。 – khelwood
您要更改列表的长度,同时遍历它 - 这是一个坏主意。见http://pythontutor.com/visualize.html#code=y%3D%5B%22hello%22%5D%0Afor%20n%20in%20y%3A%0A%20%20%20%20y.append(% 22E%22%29%0A&累积=假curInstr = 0&heapPrimitives =假模式=显示与原点=选择-frontend.js和PY = 2&rawInputLstJSON =%5B%5D&textReferences = false为可视化 – jonrsharpe
相反,你可以保存在另一个列表更新 –