python3中用for循环删除列表中元素的坑


本文摘自php中文网,作者不言,侵删。

下面为大家分享一篇详谈python3中用for循环删除列表中元素的坑,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧

for循环语句的对象是可迭代对象,可迭代对象需要实现__iter__或iter方法,并返回一个迭代器,什么是迭代器呢?迭代器只需要实现 __next__或next方法。

现在来验证一下列表为什么支持迭代:


1

2

3

4

5

6

7

8

9

10

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


结果:


1

2

3

4

<class 'list_iterator'>

1

2

3


for 语句如何循环的呢?步骤是:

(1)先判断对象是否为可迭代对象,不是的话直接报错,抛出TypeError异常,是的话,调用 __iter__或iter方法,返回一个迭代器

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

(3)迭代到最后,没有更多元素了,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者


1

2

3

4

5

6

list1 = [1,2,3,4,5,6]

for i in list1:

 if i == 2:

  list1.remove(i)

 print(i)

print(list1)


结果:


1

2

3

4

5

6

1

2

4

5

6

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

相关推荐:

python list删除元素时要注意的坑点


以上就是python3中用for循环删除列表中元素的坑的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python解释器怎么安装

浅谈Python学习之字符编码与字符串

将tensorflow的模型网络导出为单个文件的方法

Python怎么卸载不了

什么是Python re.compile 函数?

介绍Python爬取哔哩哔哩视频

Python 删除列表里所有空格项的方法

Python中list函数和se函数t的区别

Python用input输入列表的方法

Python怎么结束循环

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...