了解迭代期間修改列表的危險
在修改列表時遍歷列表可能會因列表之間的不一致而導致意外行為列表的狀態和迭代器對它的理解。為了說明這一點,請考慮以下 Python 程式碼:
l = range(100) for i in l: print(i) print(l.pop(0)) print(l.pop(0))
此程式碼產生的不是預期的連續數位輸出,而是產生特殊的結果。原因在於,當迭代器迭代列表 l 時,列表本身正在被修改。具體來說,pop(0) 方法從 l.
開頭刪除元素。為了防止這種不一致,避免修改正在迭代的容器至關重要。一種常見的解決方案是建立容器的副本並迭代該副本。但是,在這種情況下,目標是修改原始容器,則需要不同的方法。
考慮以下替代程式碼:
i = 0 while i < len(some_list): print(some_list[i]) print(some_list.pop(0)) print(some_list.pop(0)) i += 1
在此程式碼中,我們使用一個 while 迴圈來手動控制迭代。我們不直接迭代列表,而是使用索引 i 來存取元素,然後手動從 some_list 中彈出項目。這確保循環響應 some_list 的更新。
以上是為什麼在 Python 中在迭代期間修改列表會導致意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!