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

來源:互聯網
上載者:User
下面為大家分享一篇詳談python3中用for迴圈刪除列表中元素的坑,具有很好的參考價值,希望對大家有所協助。一起過來看看吧

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

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


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))


結果:


<class 'list_iterator'>123


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

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

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

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


list1 = [1,2,3,4,5,6]for i in list1: if i == 2:  list1.remove(i) print(i)print(list1)


結果:


12456[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。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.