在Python 中迭代刪除項目時的奇怪行為
在Python 中,在迭代期間刪除項目時可能會出現奇怪的結果。考慮以下程式碼:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
預期輸出:[20, 21, ..., 49]
實際輸出:[2, 4, 6, 8, 10, 12, 14 , 16, 18, 20, 21, ..., 49]
原因:
問題源自於在迭代列表時修改列表。在第一次循環迭代期間,1 被刪除。但是,後續迭代不再指向縮短清單中的 2,而是指向 3。這樣一直持續到只剩下大於 20 的元素。
解:
numbers = [n for n in numbers if n >= 20]
numbers[:] = (n for n in numbers if n >= 20)
for i, n in enumerate(numbers): if n < 20: print("do something") numbers[i] = None numbers = [n for n in numbers if n is not None]
需要注意的是,通常不建議在迭代期間修改列表的長度。所提供的解決方案提供了實現預期結果的替代方法。
以上是為什麼從 Python 列表中迭代刪除項目會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!