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

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

Patricia Arquette
Patricia Arquette原創
2025-01-05 15:52:40462瀏覽

Why Does Modifying a List During Iteration Lead to Unexpected Results?

在迭代期間修改列表

在循環遍歷列表時修改列表時,提供的程式碼片段會出現意外行為:

l  = range(100)                         
for i in l:                         
    print i,                         
    print l.pop(0),                  
    print l.pop(0)

這段程式碼的輸出與人們可能期望的不同,因為修改清單的行為(透過彈出elements) 影響迭代器。當為列表建立迭代器時,它會追​​蹤列表中的當前位置。當元素從清單中刪除時,迭代器的位置也會隨之調整。但是,如果在迭代過程中修改列表,則迭代器的位置將變得無效,並且可能會發生不可預測的結果。

在這種特定情況下,循環旨在循環遍歷列表 l 中的元素。但是,當從清單中彈出一個元素時,迭代器的位置會發生移動,導致它跳過清單中的下一個元素。因此,循環僅迭代原始列表元素的一半。

為了避免這種行為,重要的是永遠不要修改正在迭代的容器。相反,人們應該創建容器的副本並對其進行迭代。這可以透過在開始循環之前複製列表來實現:

l_copy = l[:]
for i in l_copy:
    print i,                         
    print l.pop(0),                  
    print l.pop(0)

或者,可以使用while 循環而不是for 循環,它為列表中的當前位置維護一個單獨的索引:

i = 0
while i < len(l):
    print i,                         
    print l.pop(0),                  
    print l.pop(0)
    i += 1

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

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