首頁 > 後端開發 > Python教學 > python3中用for迴圈刪除列表中元素的坑

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

不言
發布: 2018-04-19 11:28:45
原創
2380 人瀏覽過

以下為大家分享一篇詳談python3中用for迴圈刪除清單中元素的坑,具有很好的參考價值,希望對大家有幫助。一起過來看看吧

for循環語句的物件是可迭代物件,可迭代物件需要實作__iter__或iter方法,並傳回一個迭代器,什麼是迭代器呢?迭代器只需要實作 __next__或next方法。

現在來驗證一下清單為什麼支援迭代:


#

1

2

3

4

5

6

7

8

9

10

x = [1,2,3]

its = iter(x)

# its = x.__iter__()

print(type(its))

# print(its.__next__())

# print(its.__next__())

# print(its.__next__())

print(next(its))

print(next(its))

print(next(its))

登入後複製


結果:


1

2

3

4

<class &#39;list_iterator&#39;>

1

2

3

登入後複製


#for 語句如何循環的呢?步驟是:

(1)先判斷物件是否為可迭代對象,不是的話直接報錯,拋出TypeError異常,是的話,呼叫__iter__或iter方法,回傳一個迭代器

(2)不斷地呼叫迭代器的__next__或next方法,每次依序返回迭代器中的一個值

(3)迭代到最後,沒有更多元素了,就拋出異常StopIteration,這個異常python 自己會處理,不會暴露給開發者


1

2

3

4

5

6

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

for i in list1:

 if i == 2:

  list1.remove(i)

 print(i)

print(list1)

登入後複製


結果:


1

2

3

4

5

6

1

2

4

5

6

[1, 3, 4, 5, 6]

登入後複製


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

在存取鍊錶最後一個元素的next指標時,python會報錯StopIteration。

相關推薦:

python list刪除元素時要注意的坑點


以上是python3中用for迴圈刪除列表中元素的坑的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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