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

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] = 4
    print(lst)     # [1, 3, 4, 4, 6, 7, 9, 4, 3, 6, 4]

http://www.kler.cn/a/473220.html

相关文章:

  • 为深度学习引入张量
  • 备考蓝桥杯:顺序表相关算法题
  • Sprint Boot教程之五十:Spring Boot JpaRepository 示例
  • [笔记] Jenkins 安装与配置全攻略:Ubuntu 从零开始搭建持续集成环境
  • SpringBoot | @Autowired 和 @Resource 的区别及原理分析
  • Sam Altman发布博客,回顾OpenAI九年历程,直言目标已瞄准ASI超级人工智能
  • 车载软件架构 --- 关于ARXML文件那点事
  • 论文导读 | 数据库系统中基于机器学习的基数估计方法
  • 使用python脚本爬取前端页面上的表格导出为Excel
  • 基于单片机的速度里程表设计(论文+源码)
  • 基于V2X的无人机与特种车辆战地智能通信:技术融合与实战应用
  • vue3的计算属性computed传参问题
  • Nginx:Stream模块
  • 【Python运维】利用Python实现高效的持续集成与部署(CI/CD)流程
  • 优化提示词改善答疑机器人回答质量
  • Docker 使用Dockerfile创建镜像
  • 解读若依框架中的 @Xss 注解
  • [读书日志]从零开始学习Chisel 第七篇:Scala的包和导入(敏捷硬件开发语言Chisel与数字系统设计)
  • Linux运维中常用的命令总结
  • 一文学会基于 Redis 的分布式锁实现
  • fnm教程
  • docker中使用Dockerfile设置Volume挂载点
  • 手写@MapperScan
  • 【Linux系列】如何使用 nohup 命令在后台运行脚本
  • PostgreSQL学习笔记(二):PostgreSQL基本操作
  • 算法5--位运算