了解清單刪除期間的迭代修改
下面的Python 程式碼旨在從清單中刪除替代元素:
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
然而,它產生了意想不到的輸出[0, 2, 3, 5, 6, 8, 9]而不是 [0, 2, 4, 6, 8]。這源自於迭代過程的動態性質。
為什麼輸出值為[0, 2, 3, 5, 6, 8, 9]:
當循環迭代a 中的元素時,它透過刪除特定元素來修改列表。這會影響底層迭代器並解釋輸出中的刪除模式。下面是一步一步的分解:
不存在錯誤訊息:
Python 不會拋出有關修改後的迭代器的錯誤,因為該語言優先考慮效能。檢測和處理所有可能的迭代修改將產生巨大的開銷。因此,在這些情況下,Python 更重視運行速度而不是明確錯誤訊息。
與早期 Python 版本的一致性:
此處描述的行為在整個 Python 版本中都是一致的,約會回到1.4。以這種方式處理迭代修改是可變序列實現的固有特徵。
以上是為什麼在 Python 迭代過程中從清單中刪除元素會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!