從列表和執行個體來瞭解python迭代器

來源:互聯網
上載者:User

標籤:font   分享   分享圖片   closed   gif   png   opened   序列   lap   

什麼是迭代器?它是一個帶狀態的對象,在你調用next()方法的時候返回容器中的下一個值,任何實現了__iter____next__()(python2中實現next())方法的對象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一個值,如果容器中沒有更多元素了,則拋出StopIteration異常。 可迭代對象實現了__iter__方法,該方法返回一個迭代器對象

 例1:

 例2:

已知列表namelist = [‘王源‘,‘賈玲‘,‘沈騰‘,‘歐陽娜娜‘,‘鄧超‘,‘陳赫‘,‘鹿晗‘,‘鄭凱‘,‘王祖藍‘,‘Angelababy‘,‘李晨‘],刪除列表removelist = [‘王源‘,‘賈玲‘,‘沈騰‘,‘歐陽娜娜‘,‘宋小寶‘],要求將removelist列表中的每個元素從namelist中移除(屬於removelist,但不屬於namelist的忽略即可)

錯誤解答

 

#!/usr/bin/env pythonnamelist = [‘王源‘,‘賈玲‘,‘沈騰‘,‘歐陽娜娜‘,‘鄧超‘,‘陳赫‘,‘鹿晗‘,‘鄭凱‘,‘王祖藍‘,‘Angelababy‘,‘李晨‘]removelist = [‘王源‘,‘賈玲‘,‘沈騰‘,‘歐陽娜娜‘,‘宋小寶‘]for name in namelist:    if name in removelist:        namelist.remove(name)print(namelist)

執行結果:

以上並不是我們想要的結果,編輯代碼,測試查看代碼執行過程:

#!/usr/bin/env pythonnamelist = [‘王源‘,‘賈玲‘,‘沈騰‘,‘歐陽娜娜‘,‘鄧超‘,‘陳赫‘,‘鹿晗‘,‘鄭凱‘,‘王祖藍‘,‘Angelababy‘,‘李晨‘]removelist = [‘王源‘,‘賈玲‘,‘沈騰‘,‘歐陽娜娜‘,‘宋小寶‘]for name in namelist:    print(name)    if name in removelist:        print(name)        namelist.remove(name)        print(namelist)

執行結果:

 

從以上執行過程我們看到,for序列迴圈只匹配到了’王源‘、’沈騰‘,這個是為什麼呢。

其實上述結果是由於序列namelist是可迭代對象,執行for迴圈是按列表順序依次匹配。題中列表第一個元素’王源‘第一次就匹配,然後執行代碼塊remove操作,從原列表namelist刪除元素’王源‘。

註:此時列表更新為

 [‘賈玲‘, ‘沈騰‘, ‘歐陽娜娜‘, ‘鄧超‘, ‘陳赫‘, ‘鹿晗‘, ‘鄭凱‘, ‘王祖藍‘, ‘Angelababy‘, ‘李晨‘] ,此時進入第二次for迴圈,執行__next__返回的是列表中的下一個值‘沈騰‘,列表首個元素‘賈玲‘被忽略了。如此迴圈直到容器中沒有更多元素,則Stop,不會再迴圈。

 

 正確解答:

 

1 #!/usr/bin/env python2 namelist = [‘王源‘,‘賈玲‘,‘沈騰‘,‘歐陽娜娜‘,‘鄧超‘,‘陳赫‘,‘鹿晗‘,‘鄭凱‘,‘王祖藍‘,‘Angelababy‘,‘李晨‘]3 removelist = [‘王源‘,‘賈玲‘,‘沈騰‘,‘歐陽娜娜‘,‘宋小寶‘]4 5 for name in removelist:6     print(name)7     if name in namelist:8         namelist.remove(name)9 print(namelist)
View Code

 

執行結果:

 

 

從列表和執行個體來瞭解python迭代器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.