当前位置: 首页 > news >正文

python注意事项:range遍历越索引现象、列表边遍历边修改出现的问题

文章目录

  • 前言
  • 一、range遍历越索引现象
    • QS1:遍历range(2,2)会发生什么?不会报错,但是也不会遍历到任何内容
    • QS1:遍历range(3,2)会发生什么?不会报错,但是也不会遍历到任何内容
  • 二、列表边遍历边修改注意事项(Java的List系列集合使用 for-each 循环或 Iterator 遍历集合时也会有下面问题)
    • 1 避免直接修改列表长度:特别是边遍历边append和pop元素
    • 2 边遍历边修改里面元素的值:这个是安全的,一般是结合enumerate 获取索引一起遍历


前言


一、range遍历越索引现象

QS1:遍历range(2,2)会发生什么?不会报错,但是也不会遍历到任何内容

    for i in range(2,2):print(i)     # 不会报错,但是也不会输出任何内容

answer:不会报错,但是也不会遍历到任何内容

QS1:遍历range(3,2)会发生什么?不会报错,但是也不会遍历到任何内容

    for i in range(3,2):print(i)     # 不会报错,但是也不会输出任何内容

answer:不会报错,但是也不会遍历到任何内容

上面的这种range越索引不会报错,也不会遍历到内容,其实在遍历的结尾出用到的非常频繁
(1)range 函数本身不会引发索引越界错误,因为它生成的是一个惰性序列(在 Python 3 中),而不是直接生成一个完整的列表。
(2)range 生成的序列是动态计算的,只有在迭代时才会生成值。因此,即使你定义的 range 范围不合理(比如 range(3, 2)),它也不会引发索引越界错误,而是直接生成一个空序列。

二、列表边遍历边修改注意事项(Java的List系列集合使用 for-each 循环或 Iterator 遍历集合时也会有下面问题)

1 避免直接修改列表长度:特别是边遍历边append和pop元素

  • 问题:遍历时直接增删元素会改变列表长度,导致索引错位或跳过元素。
  • 解决方案:
    • 遍历副本(保险还是深拷贝遍历比较安全),修改原列表。
    • 使用 enumerate 获取索引
    • 直接创建一个新的列表(使用列表推导式创建新列表),满足条件的往这个里面加
    • 直接使用 filter 函数过滤

2 边遍历边修改里面元素的值:这个是安全的,一般是结合enumerate 获取索引一起遍历

lst = [1,3,2,2,6,7,9,2,3,6,2]for i,e in enumerate(lst):if e == 2:lst[i] = 4print(lst)     # [1, 3, 4, 4, 6, 7, 9, 4, 3, 6, 4]
http://www.lryc.cn/news/517820.html

相关文章:

  • 【C++】模板与泛型编程(三):重载与模板
  • JavaScript字符串拓展:实用方法与示例全解析
  • 基于html5实现音乐录音播放动画源码
  • 初学stm32 --- ADC模拟/数字转换器工作原理
  • 导航技术的分类
  • C++语言的函数实现
  • 每日一题-两个链表的第一个公共结点
  • 细说STM32F407单片机以轮询方式读写外部SRAM的方法
  • 【3】安装cyclictest和iperf
  • C语言将点分十进制的IP字符串转成4个整数
  • go语言学习 笔记 1(变量,语法,数据类型)
  • 无网络时自动切换备用网络环境
  • 电脑32位和64位之区别(Difference between 32-Bit and 64 Bit Computers)
  • 系统思考—结构影响行为
  • 【算法不挂科】算法期末考试【选择题专项练习】<多单元汇总>
  • 2025.1.8(c++对c语言的扩充——堆区空间,引用,函数)
  • 如何将Yum源修改为本地挂载的ISO镜像
  • salesforce如何在系统里保存密码
  • 函数提升+上下文+内存清理及释放
  • 计算机网络之---计算机网络的性能评估
  • Unity学习之UGUI进阶
  • 深度学习领域创新黑马!频域特征融合新突破
  • 路由器的转发表
  • 用Cline打造你的智能搜索助手:Tavily Search MCP集成指南
  • HTML+CSS+JS制作中华传统美食主题网站(内附源码,含5个页面)
  • 黄仁勋CES 2025演讲重点内容
  • TVbox 手机、智能电视节目一网打尽
  • sys.dm_exec_connections:查询与 SQL Server 实例建立的连接有关的信息以及每个连接的详细信息(客户端ip)
  • kubesphere前端源码运行
  • 分布式主键ID生成方式-snowflake雪花算法