2016-11-04 169 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 
...