目錄
正確答案
首頁 後端開發 Python教學 在 Python 中迭代列表時從列表中刪除項目時出現奇怪的結果

在 Python 中迭代列表時從列表中刪除項目時出現奇怪的結果

Feb 09, 2024 am 10:10 AM
隱式轉換

在 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 的數字。看起來我在刪除時做錯了什麼。


正確答案


您在迭代清單時正在修改清單。這表示第一次循環時,i == 1,因此1被從清單中刪除。然後for循環轉到列表中的第二項,它不是2,而是3!然後將其從清單中刪除,然後 for 迴圈繼續執行清單中的第三項,現在是 5。依此類推。也許這樣更容易視覺化,用 ^ 指向 i 的值:

[1, 2, 3, 4, 5, 6...]
 ^
登入後複製

這是清單最初的狀態;然後 1 被刪除,循環轉到清單中的第二項:

[2, 3, 4, 5, 6...]
    ^
[2, 4, 5, 6...]
       ^
登入後複製

等等。

沒有好的方法可以在迭代列表時改變列表的長度。你能做的最好的事情就是這樣:

numbers = [n for n in numbers if n >= 20]
登入後複製

或這個,用於就地更改(括號中的東西是一個生成器表達式,它在切片分配之前隱式轉換為元組):

numbers[:] = (n for n in numbers if n >= 20)
登入後複製

如果您想在刪除 n 之前對其執行操作,您可以嘗試的一個技巧是:

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

java中short的用法 java中short的用法 May 07, 2024 am 03:33 AM

short 是 Java 中表示 16 位元有符號整數的原始資料類型,其範圍為 -32,768 到 32,767。它常用於表示小整數,如計數器或 ID,並支援基本算術運算和類型轉換。但由於 short 是一種有符號類型,使用除法時需謹慎,以避免溢位或下溢。

sql中ifnull的用法 sql中ifnull的用法 Apr 28, 2024 am 09:57 AM

IFNULL 函數用於檢查表達式是否為 NULL,如果是則傳回指定的預設值,否則傳回表達式的值。它可以防止空值導致錯誤,允許操作空值,提高查詢的可讀性。用法包括:將空值替換為預設值、排除空值進行計算和巢狀使用處理多個空值情況。

c語言怎麼算除法 c語言怎麼算除法 Apr 13, 2024 pm 09:12 PM

C 語言中,除法運算子 / 的行為取決於運算元的資料型態:整數除法:當操作數為整數時,進行整數除法,結果向下取整。浮點數除法:操作數為浮點數時,進行浮點數除法,結果為浮點數。類型轉換:一個操作數為整數,另一個不是時,整數會隱式轉換為浮點數,然後進行浮點數除法。除數為 0:除數為 0 時產生數學誤差。取模運算:使用 % 運算子進行取模運算,而非除法取模。

java中的char是什麼意思 java中的char是什麼意思 May 01, 2024 pm 06:15 PM

Java 中的char 類型用於儲存單一Unicode 字符,佔2 個字節,範圍從U+0000 到U+FFFF,主要用於儲存文字字符,可以透過單引號或Unicode 轉義序列初始化,可參與比較、相等性、不相等性和連接運算,可隱式轉換為int 類型,也可以明確轉換為Character 物件。

oracle中(+的用法 oracle中(+的用法 May 08, 2024 pm 08:12 PM

Oracle 中加號(+)運算子可用於:連接字串、數字、日期和時間間隔;處理 NULL 值,將 NULL 轉換為非​​ NULL 值;轉換資料類型為字串類型。

一起來探索隱式類型轉換的常見應用場景! 一起來探索隱式類型轉換的常見應用場景! Jan 11, 2024 pm 04:45 PM

讓我們一起探討隱式類型轉換的常見應用場景!導言:在程式語言中,隱式型別轉換是一種自動執行的資料型別轉換過程。在一些程式語言中,這種轉換是隱含進行的,無需明確地告訴編譯器或解釋器進行轉換。隱式類型轉換在程式設計中擁有廣泛的應用場景,本文將針對其中一些常見的應用場景進行討論。數值計算中的隱式類型轉換在數值計算中,經常需要進行不同類型的資料之間的運算。當不同類型的數據

mysql中*是什麼意思 mysql中*是什麼意思 Apr 26, 2024 am 07:21 AM

MySQL 中的星號 (*) 表示“所有”,具有不同用法:選擇所有列選擇所有行JOIN 表LIKE 子句的通配符REGEXP 子句的量詞隱式類型轉換

c語言中數值型常數怎麼表示出來 c語言中數值型常數怎麼表示出來 May 02, 2024 pm 07:45 PM

C 語言中數值型常數有以下表示方式:十進制整數八進制整數十六進制整數十進制浮點數科學記數法字元常數布林常數

See all articles