詳談python3中用for循環(huán)刪除列表中元素的坑
for循環(huán)語句的對象是可迭代對象,可迭代對象需要實(shí)現(xiàn)__iter__或iter方法,并返回一個(gè)迭代器,什么是迭代器呢?迭代器只需要實(shí)現(xiàn) __next__或next方法。
現(xiàn)在來驗(yàn)證一下列表為什么支持迭代:
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))
結(jié)果:
<class 'list_iterator'> 1 2 3
for 語句如何循環(huán)的呢?步驟是:
(1)先判斷對象是否為可迭代對象,不是的話直接報(bào)錯,拋出TypeError異常,是的話,調(diào)用 __iter__或iter方法,返回一個(gè)迭代器
(2)不斷地調(diào)用迭代器的__next__或next方法,每次按序返回迭代器中的一個(gè)值
(3)迭代到最后,沒有更多元素了,就拋出異常 StopIteration,這個(gè)異常 python 自己會處理,不會暴露給開發(fā)者
list1 = [1,2,3,4,5,6] for i in list1: if i == 2: list1.remove(i) print(i) print(list1)
結(jié)果:
1 2 4 5 6 [1, 3, 4, 5, 6]
第二個(gè)print打印的結(jié)果顯然是刪除了元素2的列表,第一個(gè)print為什么沒有3呢?因?yàn)閳?zhí)行for語句時(shí),先生成一個(gè)迭代器,再用next方法,按序返回迭代器中的值,當(dāng)列表中刪除了元素2時(shí),元素3的索引變成了原來元素2的索引,把元素3往前推到了元素2的位置,所以next方法就沒返回值3.在python中,使用iter函數(shù)可以獲得有序聚合類型的迭代器,我個(gè)人將迭代器理解為帶有next指針的單向鏈表,獲取到的迭代器為鏈表的表頭,表頭內(nèi)容為空,next指針指向有序聚合類型的第一個(gè)元素。
在訪問鏈表最后一個(gè)元素的next指針時(shí),python會報(bào)錯StopIteration。
以上這篇詳談python3中用for循環(huán)刪除列表中元素的坑就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能,結(jié)合實(shí)例形式分析了Python基于wmi模塊的遠(yuǎn)程連接與進(jìn)程操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06
Django錯誤:TypeError at / ''bool'' object is not callable解決
這篇文章主要介紹了Django 錯誤:TypeError at / 'bool' object is not callable解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Python高階函數(shù)之filter()函數(shù)代碼示例
這篇文章主要介紹了Python高階函數(shù)之filter()函數(shù)代碼示例,獲取了一個(gè)序列的時(shí)候,想要把一些內(nèi)容去掉,保留一部分內(nèi)容的時(shí)候可以使用高效的filter()函數(shù),需要的朋友可以參考下2023-07-07
Python制作基礎(chǔ)學(xué)生信息管理系統(tǒng)
本文詳細(xì)講解了Python制作基礎(chǔ)學(xué)生信息管理系統(tǒng)的實(shí)現(xiàn),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
python使用MQTT給硬件傳輸圖片的實(shí)現(xiàn)方法
最近因需要用python寫一個(gè)微服務(wù)來用MQTT給硬件傳輸圖片,其中python用的是flask框架。這篇文章主要介紹了python使用MQTT給硬件傳輸圖片,需要的朋友可以參考下2019-05-05
python使用wxpy實(shí)現(xiàn)微信消息防撤回腳本
這篇文章主要為大家詳細(xì)介紹了python使用wxpy實(shí)現(xiàn)微信消息防撤回腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
如何實(shí)現(xiàn)Python調(diào)用Golang代碼詳解
這篇文章主要介紹了如何實(shí)現(xiàn)Python調(diào)用Golang代碼,Python和Golang都是當(dāng)下非常流行的編程語言,在實(shí)際開發(fā)中,我們可能會遇到需要將Python和Golang進(jìn)行組合使用的場景,感興趣想要詳細(xì)了解可以參考下文2023-05-05
Python中常用操作字符串的函數(shù)與方法總結(jié)
這篇文章主要介紹了Python中常用操作字符串的函數(shù)與方法總結(jié),包括字符串的格式化輸出與拼接等基礎(chǔ)知識,需要的朋友可以參考下2016-02-02
Python 實(shí)現(xiàn)在文件中的每一行添加一個(gè)逗號
下面小編就為大家分享一篇Python 實(shí)現(xiàn)在文件中的每一行添加一個(gè)逗號,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

