首頁 >後端開發 >Python教學 >為什麼在 Python 迭代過程中刪除列表元素會導致意外結果?

為什麼在 Python 迭代過程中刪除列表元素會導致意外結果?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-25 07:07:09551瀏覽

Why Does Removing List Elements During Iteration in Python Lead to Unexpected Results?

意外行為:在迭代期間從列表中刪除元素

嘗試迭代列表並刪除滿足特定條件的特定元素時,如果在迭代過程中修改列表,可能會出現意外行為。考慮以下 Python 程式碼:

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)

令人驚訝的是,所得的結果是:

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]

我們希望刪除 20 以下的數字,但它們仍然保留在結果中。這是因為列表在迭代時被修改。當第一個元素 1 被刪除時,後續元素的位置會移動,並且循環繼續到修改列表中的下一個元素,這不是預期的元素。

解決此問題並準確地迭代列表時,我們可以使用列表理解或就地更改。清單推導允許我們建立一個僅包含滿足指定條件的元素的新清單:

numbers = [n for n in numbers if n >= 20]

或者,可以使用切片賦值執行就地變更:

numbers[:] = (n for n in numbers if n >= 20)

透過這種方式修改列表,不影響迭代,可以達到想要的結果。

以上是為什麼在 Python 迭代過程中刪除列表元素會導致意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn