2016-11-04 170 views
-3

我对这块python感到困惑。根据我的理解,它应该只做一次循环,因为列表中只有一个元素,但它似乎不断循环,我不知道为什么。我知道如何让它做我想做的事情,但我只是困惑,为什么这不起作用。谢谢追加到循环列表

y=["hello"] 
for n in y: 
    y.append("e") 
+3

你的循环将结束。你不会到达列表的末尾,因为你不断添加额外的东西。当你迭代它时最好不要改变它。 – khelwood

+4

您要更改列表的长度,同时遍历它 - 这是一个坏主意。见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

+0

相反,你可以保存在另一个列表更新 –

回答

1

您正在循环的每次迭代中向y添加新元素。在第一次迭代时,它将看到'hello',然后附加一个'e'。在第二次迭代中,它看到'e'并追加另一个,然后在第三次看到那个,依此类推。如果您尝试删除而不是将元素附加到正在迭代的列表,则会出现类似的问题。如果你想避免这种情况,请迭代一个副本:

>>> y = ["hello"] 
>>> for n in y[:]: 
...  y.append("e") 
... 
>>> y 
['hello', 'e'] 
+0

我才意识到这是为什么。它的,因为我不断地加入到列表中,以便会员总是一个列表中的多种元素,从而无限循环,谢谢。 – fdbdcbc

0

您正在解析的同一列表上追加一些数据。在每次迭代结束时添加新的元素(“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 
...