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

 更新时间:2018年04月19日 10:43:24   作者:jimmy_gyn  
下面小编就为大家分享一篇详谈python3中用for循环删除列表中元素的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

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

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'>
1
2
3

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

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

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

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

list1 = [1,2,3,4,5,6]
for i in list1:
 if i == 2:
  list1.remove(i)
 print(i)
print(list1)

结果:

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。

以上这篇详谈python3中用for循环删除列表中元素的坑就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Django连接MQTT的示例代码

    Django连接MQTT的示例代码

    本文主要介绍了Django连接MQTT的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Python&Matlab实现樱花的绘制

    Python&Matlab实现樱花的绘制

    正值樱花飘落的季节,本文将利用Python和Matlab分别绘制一颗樱花树,文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起动手尝试一下
    2022-04-04
  • 简单理解Python中基于生成器的状态机

    简单理解Python中基于生成器的状态机

    这篇文章主要介绍了简单理解Python中基于生成器的状态机,来自于IBM官方技术文档,需要的朋友可以参考下
    2015-04-04
  • python 日期排序的实例代码

    python 日期排序的实例代码

    这篇文章主要介绍了python 日期排序的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • python两种遍历字典(dict)的方法比较

    python两种遍历字典(dict)的方法比较

    这篇文章主要介绍了python两种遍历字典(dict)的方法比较,同时介绍了dict遍历中带括号与不带括号的性能问题,需要的朋友可以参考下
    2014-05-05
  • 排序算法之插入排序法解析

    排序算法之插入排序法解析

    这篇文章主要介绍了排序算法之插入排序法解析,插入排序法是一种简单但有效的排序算法,其基本思想是将一个待排序的元素逐个插入到已经排好序的元素序列中,直至所有元素都被插入完成,从而得到一个有序序列,需要的朋友可以参考下
    2023-07-07
  • python 限制函数调用次数的实例讲解

    python 限制函数调用次数的实例讲解

    下面小编就为大家分享一篇python 限制函数调用次数的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python中根据时间自动创建文件夹的代码实现

    Python中根据时间自动创建文件夹的代码实现

    这篇文章主要介绍了Python中根据时间自动创建文件夹的代码实现,这样的话给工作带来极大的便利,方便桌面文件按时间存放,具体实例代码跟随小编一起看看吧
    2021-10-10
  • Tensorflow2.4从头训练Word Embedding实现文本分类

    Tensorflow2.4从头训练Word Embedding实现文本分类

    这篇文章主要为大家介绍了Tensorflow2.4从头训练Word Embedding实现文本分类,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • python操作MySQL数据库的方法分享

    python操作MySQL数据库的方法分享

    坚持每天学一点,每天积累一点点,作为自己每天的业余收获,这个文章是我在吃饭的期间写的,利用自己零散的时间学了一下python操作MYSQL,所以整理一下
    2012-05-05

最新评论