国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳談python3中用for循環(huán)刪除列表中元素的坑

2020-02-22 23:44:51
字體:
來源:轉載
供稿:網(wǎng)友

for循環(huán)語句的對象是可迭代對象,可迭代對象需要實現(xiàn)__iter__或iter方法,并返回一個迭代器,什么是迭代器呢?迭代器只需要實現(xiàn) __next__或next方法。

現(xià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))

結果:

<class 'list_iterator'>123

for 語句如何循環(huán)的呢?步驟是:

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

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

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

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呢?因為執(zhí)行for語句時,先生成一個迭代器,再用next方法,按序返回迭代器中的值,當列表中刪除了元素2時,元素3的索引變成了原來元素2的索引,把元素3往前推到了元素2的位置,所以next方法就沒返回值3.在python中,使用iter函數(shù)可以獲得有序聚合類型的迭代器,我個人將迭代器理解為帶有next指針的單向鏈表,獲取到的迭代器為鏈表的表頭,表頭內容為空,next指針指向有序聚合類型的第一個元素。

在訪問鏈表最后一個元素的next指針時,python會報錯StopIteration。

以上這篇詳談python3中用for循環(huán)刪除列表中元素的坑就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 休宁县| 张掖市| 获嘉县| 仙居县| 修文县| 沙田区| 湘潭县| 科尔| 日照市| 龙门县| 湘西| 新和县| 横山县| 丘北县| 蒲江县| 将乐县| 宁河县| 自治县| 高青县| 洛扎县| 高安市| 尉犁县| 客服| 枝江市| 蕉岭县| 永安市| 饶河县| 岳池县| 镇平县| 云安县| 慈溪市| 龙泉市| 长寿区| 佛山市| 晋江市| 乐业县| 涟源市| 延川县| 乌拉特后旗| 乐昌市| 铜鼓县|