我對這塊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
相反,你可以保存在另一個列表更新 –