首頁 > 後端開發 > Python教學 > 為什麼在迭代過程中從 Python 清單中刪除元素會產生意外結果?

為什麼在迭代過程中從 Python 清單中刪除元素會產生意外結果?

Patricia Arquette
發布: 2024-12-04 18:11:12
原創
1021 人瀏覽過

Why Does Removing Elements from a Python List During Iteration Produce Unexpected Results?

迭代列表時從列表中刪除

迭代列表並刪除元素時,Python 的行為可能會令人費解。下面的程式碼片段:

a = list(range(10))
remove = False
for b in a:
    if remove:
        a.remove(b)
    remove = not remove
print(a)
登入後複製

輸出 [0, 2, 3, 5, 6, 8, 9],而不是預期的 [0, 2, 4, 6, 8]。

了解迭代刪除行為

此輸出來自 Python 在迭代過程中處理可變序列的方式的結果。當呼叫remove時,底層列表被修改。然而,迭代器保持不變,並繼續遍歷修改後的清單。

下圖說明了刪除過程:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       <-  b = 0; remove? no
 ^
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       <-  b = 1; remove? yes
    ^
[0, 2, 3, 4, 5, 6, 7, 8, 9]          <-  b = 3; remove? no
       ^
[0, 2, 3, 4, 5, 6, 7, 8, 9]          <-  b = 4; remove? yes
          ^
[0, 2, 3, 5, 6, 7, 8, 9]             <-  b = 6; remove? no
             ^
[0, 2, 3, 5, 6, 7, 8, 9]             <-  b = 7; remove? yes
                ^
[0, 2, 3, 5, 6, 8, 9]                <-  b = 9; remove? no
                   ^
登入後複製

解決剩餘問題

  1. 錯誤指示: Python不會拋出錯誤因為它會產生運行時開銷。它假設程式設計師知道在迭代期間修改列表的後果並進行相應的處理。
  2. 歷史行為:這種行為從早期版本(至少 1.4)開始就存在於 Python 中,並且與可變序列的典型實現方式一致。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板