首頁 >後端開發 >Python教學 >為什麼從 Python 列表中迭代刪除項目會產生意外結果?

為什麼從 Python 列表中迭代刪除項目會產生意外結果?

Patricia Arquette
Patricia Arquette原創
2024-12-23 06:01:13261瀏覽

Why Does Iteratively Removing Items from a Python List Produce Unexpected Results?

在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中文網其他相關文章!

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