首頁 >後端開發 >Python教學 >為什麼在迭代期間修改列表會產生意外結果?

為什麼在迭代期間修改列表會產生意外結果?

Susan Sarandon
Susan Sarandon原創
2024-12-23 19:53:17795瀏覽

Why Does Modifying a List During Iteration Produce Unexpected Results?

在迭代期間修改列表時出現意外結果

在迭代列表時修改列表時,可能會出現意外結果。考慮以下程式碼:

numbers = list(range(1, 50))

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

print(numbers)

儘管打算從清單中刪除小於 20 的數字,但結果輸出包含其中一些數字。出現這種差異的原因是列表在迭代過程中發生了變更。

具體來說,在刪除第一個低於20 (1) 的數字後,循環繼續到原始列表中的下一項,現在是3 而不是2此過程繼續進行,從而刪除所有低於20 的奇數。

為了避免此問題,建議使用替代方法,例如 list推導式或產生器表達式。以下是使用列表理解的範例:

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

此程式碼保留列表的原始順序,同時過濾掉不需要的元素。或者,您可以使用生成器表達式進行就地更改:

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

如果需要在刪除某個元素之前對其執行操作,請考慮使用索引循環並將該元素設為 None。然後,建立一個僅包含非 None 元素的新清單:

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]

以上是為什麼在迭代期間修改列表會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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