欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2018年04月19日 10:43:24   作者:jimmy_gyn  
下面小編就為大家分享一篇詳談python3中用for循環(huán)刪除列表中元素的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

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

現(xiàn)在來(lái)驗(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 語(yǔ)句如何循環(huán)的呢?步驟是:

(1)先判斷對(duì)象是否為可迭代對(duì)象,不是的話直接報(bào)錯(cuò),拋出TypeError異常,是的話,調(diào)用 __iter__或iter方法,返回一個(gè)迭代器

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

(3)迭代到最后,沒(méi)有更多元素了,就拋出異常 StopIteration,這個(gè)異常 python 自己會(huì)處理,不會(huì)暴露給開發(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為什么沒(méi)有3呢?因?yàn)閳?zhí)行for語(yǔ)句時(shí),先生成一個(gè)迭代器,再用next方法,按序返回迭代器中的值,當(dāng)列表中刪除了元素2時(shí),元素3的索引變成了原來(lái)元素2的索引,把元素3往前推到了元素2的位置,所以next方法就沒(méi)返回值3.在python中,使用iter函數(shù)可以獲得有序聚合類型的迭代器,我個(gè)人將迭代器理解為帶有next指針的單向鏈表,獲取到的迭代器為鏈表的表頭,表頭內(nèi)容為空,next指針指向有序聚合類型的第一個(gè)元素。

在訪問(wèn)鏈表最后一個(gè)元素的next指針時(shí),python會(huì)報(bào)錯(cuò)StopIteration。

以上這篇詳談python3中用for循環(huán)刪除列表中元素的坑就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django restframework 源碼分析之認(rèn)證詳解

    Django restframework 源碼分析之認(rèn)證詳解

    這篇文章主要介紹了Django-restframework 源碼分析之認(rèn)證詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 最新評(píng)論