詳談python3中用for迴圈刪除列表中元素的坑

2022-10-04 19:54:15 字數 1185 閱讀 4378

for迴圈語句的物件是可迭代物件,可迭代物件需要實現__iter__或iter方法,並返回乙個迭代器,什麼是迭代器呢?迭代器只需要實現 __next__或next方法。

現在來驗證一下列表為什麼支援迭代:

x = [1,2,3]

its = iter(x)

# its = x.__iter__()

print(type(its))

# print(its.__next__())

# print(its.__nexwww.cppcns.comt__())

# print(its.__next__())

print(next(its))

print(next(its))

print(next(its))

結果:12

3for 語句如何迴圈的呢?步驟是:

(1)先判斷物件是否為可迭代物件,不是的話直接報錯,丟擲typeerror異常,是的話,呼叫 __iter__或iter方法,返回乙個迭代器

(2)不斷地www.cppcns.com呼叫迭代器的__next__或next方法,每次按序返回迭代器中的乙個值

(3)迭代到最後,沒有更多元素了,就www.cppcns.com丟擲異常 stopiteration,這個異常 python 自己會處理,不會暴露給程式設計客棧開發者

list1 = [1,2,3,4,5,6]

for i in list1:

if i == 2:

list1.remove(i)

print(i)

print(list1)

結果:124

56[1, 3, 4, 5, 6]

第二個print列印的結果顯然是刪除了元素2的列表,第乙個print為什麼沒有3呢?因為執行for語句時,先生成乙個迭代器,再用next方法,按序返回迭代器中的值,當列表中刪除了元素2時,元素3的索引變成了原來元素2的索引,把元素3往前推到了元素2的位置,所以next方法就沒返回值3.在python中,使用iter函式可以獲得有序聚合型別的迭代器,我個人將迭代器理解為帶有next指標的單uvrltku向鍊錶,獲取到的迭代器為鍊錶的表頭,表頭內容為空,next指標指向有序聚合型別的第乙個元素。

在訪問鍊錶最後乙個元素的next指標時,python會報錯stopiteration。

本文標題: 詳談python3中用for迴圈刪除列表中元素的坑

本文位址:

Python3中用for迴圈刪除列表中元素的坑

定義乙個學生類,例項屬性有name 姓名 age 年齡 提示使用者分別輸入3個學生資訊 姓名以及年齡 根據使用者輸入的資訊建立3個學生物件,將這3個學生物件存入列表,遍歷列表刪除年齡小於18歲的學生物件,最後輸出列表中剩餘的學生資訊 class student object def init sel...

python3實現DNS網域名稱輪循業務監控

大部分的dns解析都是乙個網域名稱對應乙個ip位址,但是通過dns輪循技術可以做到乙個網域名稱對應多個ip,從而實現最簡單且高效的負載平衡,不過此方案最大的弊端是目標主機不可用時無法被自動剔除,因此做好業務主機的服務可用監控至關重要。本示例通過分析當前網域名稱的解析ip,再結合服務埠探測來實現自動監...

python3中異常處理 Python3異常處理

python的異常處理機制 使用 try.except 捕獲異常 try 業務實現 except error1,error2,as e 出現異常後的處理 異常類的繼承關係 baseexception systemexit keyboardinterrupt generatorexit excepti...