了解 Python 的列表迭代行為
使用 Python 列表時,了解迭代的運作方式以避免意外結果至關重要。當在迭代列表的同時修改列表時,會出現一個常見的陷阱。考慮以下程式碼:
x = [1,2,2,2,2] for i in x: x.remove(i) print(x)
與預期相反,此程式碼無法從清單中刪除所有元素。相反,它留下了兩個元素。要理解原因,讓我們深入研究列表迭代期間的操作順序。
列表修改的迭代順序
Python 的 for 迴圈逐個元素地迭代列表。當您透過刪除循環內的元素來修改清單時,清單的長度會改變。這意味著當循環迭代器向前移動時,原始序列中的下一個元素將被跳過。
在我們的範例中,當第一次迭代從 x 中刪除元素 1 時,列表的長度會遞減。這會跳過原始序列中的下一個元素 2。隨著循環的繼續,會發生類似的跳過,留下 2 和另一個元素未刪除。
解決問題
要解決此問題,請避免修改您的原始清單重新迭代。相反,請考慮建立要迭代的清單的副本,如下所示:
for i in x[:]: x.remove(i)
語法 x[:] 建立 x 的“切片”,其中包含其所有元素,從而有效地建立副本。透過迭代此副本,您可以安全地從原始清單中刪除元素,而無需跳過任何元素。
以上是迭代時修改列表時導致意外行為的原因是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!