首页 > 编程语言 >从python列表里删除一个元素会对reversed() 产生怎样的影响

从python列表里删除一个元素会对reversed() 产生怎样的影响

时间:2023-01-30 17:41:16浏览次数:39  
标签:迭代 python reversed rev iter 列表 lst print


这是一个在stackoverflow上看到的问题,非常的有趣且值得研究。

1. iter

使用iter函数返回列表的迭代器,随后从列表里删除一个元素,在遍历迭代器时,输出的内容会是怎样的呢?

lst = ['a', 'b', 'c', 'd']
iter_lst = iter(lst)
lst.remove('c')
print(list(iter_lst))

考虑2分钟,想一想print函数会输出什么呢?答案是

['a', 'b', 'd']

从列表里删除元素c并不影响迭代器的使用,这也揭示了迭代器的本质,迭代器本身并不保存数据而是对数据进行迭代遍历,在迭代遍历时列表lst中已经没有了c,自然也就不会输出c。

2. reversed

reversed 返回一个反向迭代器,接下来对列表做同样的事情

lst = ['a', 'b', 'c', 'd']
rev_iter_lst = reversed(lst)
lst.remove('c')
print(list(rev_iter_lst))

猜猜这次会输出什么内容呢?答案很意外,不是[‘a’, ‘b’, ‘d’], 而是[],最终输出的是空列表。

这是为什么呢?然我们回到迭代器的本质上来寻找答案。迭代器本身并不存储数据,这一点很关键,它自身存储一个迭代开始的位置,每次对它调用next函数时都会遍历到可迭代对象的下一个元素。rev_iter_lst 所记录的迭代开始的位置是d的索引位置3,由于删除了c,导致d向前移动了一位,d的索引位置变成了2,原来的索引3位置上没有任何数据了,这导致rev_iter_lst在遍历时得到一个空的列表。

如果前面的理解都正确,在删除c后,再向列表里增加一个新的元素,索引3的位置上就会补充一个新的元素,这样rev_iter_lst 仍然可以正常工作,实验一下

lst = ['a', 'b', 'c', 'd']
rev_iter_lst = reversed(lst)
lst.remove('c')
lst.append('ok')
print(list(rev_iter_lst))

输出内容为

['ok', 'd', 'b', 'a']

果真如此。


标签:迭代,python,reversed,rev,iter,列表,lst,print
From: https://blog.51cto.com/u_15948370/6027497

相关文章

  • 用python实现一个自动保存复制图片的功能
    由于经常写作,需要为文章准备一些配图,通常这些配图是从百度图片搜索里准备的。在准备图片时,我遇到了两个小麻烦:有些图片的格式是webp,需要在另存为时指定格式有些图片需要剪切......
  • zodb,一个python对象数据库
    1.什么是对象数据库关系型数据库,是指采用了关系模型来组织数据的数据库,以行和列的形式存储数据库,典型如mysql。NoSQL数据库,是指非关系型数据库,典型如mongodb。对象数据库,是......
  • python怎么做类型标注
    文章目录​​1.为变量做类型标注​​​​1.1简单的数据类型​​​​1.2使用Optional​​​​1.3使用Union​​​​1.4为容器类型做标注​​​​1.4.1为集合做标注​......
  • c++多线程调用python
    脚本语言是快速编写富有弹性的代码的重要方法之一,在 Unix 系统自动化管理中已经应用了多种脚本语言。现在,在许多应用开发中,也提供了脚本层,这大大方便用户实现通用任务自......
  • 在python代码中,写其他编程语言的hello world
    1.helloworld不论哪种编程语言,在你最开始学习时,都会给你一个在终端输出helloworld的示例print("helloworld")这已经成为一种惯例,最近在github上闲逛时,偶遇了一个特别有......
  • python 系统更新跟踪
    #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#需求:#动态捕获指定服务器最新发布接种应用系统路......
  • QT(c++) 线程 调用python问题
    1、背景简单说一下需求,Qt开发的上位机界面程序,需要调用Python编写的算法跑一个结果返回到界面上显示。2、度娘出一篇博客,按照步骤进行环境搭建和简单的代码测试......
  • 用python制作一个简单的zip压缩工具
    1.功能设计对文件或文件夹压缩,是日常工作中经常要做的事情,市面上也有非常多的压缩工具,在linux系统里,有zip,tar等命令可以用于压缩。最近学习了python的zipfile模块,它提供......
  • 掌握hashtable,深度理解python字典的数据结构
    文章目录​​1.hash函数​​​​2.hashtable​​​​2.1链地址法实现hashtable​​​​2.2解决冲突​​​​2.3开放寻址法实现hashtable​​​​2.4逻辑删除key​​​......
  • 忘掉python的os.path吧,pathlib巨好用
    1.pathlib取代os.path模块从python3.4开始,pathlib正式成为标准库,旨在取代老旧的os.path模块和一些os模块中对系统路径的操作。pathlib提供了表示文件系统路径的类,而os.pat......