for循环时列表长度改变,会发生什么?

以以下两种形式为例:

# 第一种形式
for i in li:
# 第二种形式
for i in range(len(li))

先说结论:

  • 无论是哪种遍历,都是严格按照下标进行,li[0]之后必然是li1
  • 形式1(for i in li)会不断检查长度确定遍历终点,到达终点停止。
  • 形式2(for i in range(len(li)))的长度会在遍历一开始确定,假如数组长度变长,遍历次数不会增多,假如数组长度变短,可能诱发访问越界错误。
import numpy
li = []
for i in range(5):li.append(10-i)
for i in li:print(i)li.pop(0)print(li)
10
[9, 8, 7, 6]
8
[8, 7, 6]
6
[7, 6]

列表变小,循环次数也变少

li2 = []
for i in range(5):li2.append(i)
for i in li2:li2.append(i+5)if i>20:breakprint(li2)
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]

列表变大,循环次数也变大,(假如没有break,这段代码会无限循环)

li = []
for i in range(5):li.append(10-i)
for i in range(len(li)):print(li[i])li.pop(0)print(li)
10
[9, 8, 7, 6]
8
[8, 7, 6]
6
[7, 6]---------------------------------------------------------------------------IndexError                                Traceback (most recent call last)<ipython-input-4-b4c48012bfa9> in <module>3     li.append(10-i)4 for i in range(len(li)):
----> 5     print(li[i])6     li.pop(0)7     print(li)IndexError: list index out of range

列表变小,访问越界错误

li = []
for i in range(5):li.append(i)
for i in range(len(li)):print(li[i])li.append(i+5)print(li)
0
[0, 1, 2, 3, 4, 5]
1
[0, 1, 2, 3, 4, 5, 6]
2
[0, 1, 2, 3, 4, 5, 6, 7]
3
[0, 1, 2, 3, 4, 5, 6, 7, 8]
4
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

列表变大:循环次数不变

python: for循环时列表长度改变,会发生什么?相关推荐

  1. Python中循环(列表循环)的学习笔记~

    1 致谢 感谢菜鸟教程的帮助~ 链接如下: https://www.runoob.com/python/python-func-range.html 2 前言 今天在学习K-means++算法~ 3 ...

  2. Python for循环处理列表的易出现的错误

    for循环是一种遍历列表的有效方法,但不应在for循环中修改列表,否则将导致Python难以跟踪其中元素,造成逻辑错误.要在遍历列表的同时对其进行修改,可使用while循环.通过while循环同列表和 ...

  3. Python:for循环,列表操作制作员工管理系统EMS

    EMS(Employee manager System员工管理系统) - 做命令行版本的员工管理系统 - 功能:四个 1.查询: - 显示当前系统当中的所有员工 2.添加 - 将员工添加到当前系统中 ...

  4. python for循环例子_Python for循环生成列表的实例

    Python for循环生成列表的实例 一般Python for语句前不加语句,但我在机器学习实战中看到了这两条语句: featList = [example[i] for example in da ...

  5. [转载] 大数据分析Python For循环教程

    参考链接: Python中的迭代器函数1 大数据分析Python除了循环遍历列表之外,for循环还有很多其他功能,在现实世界的数据科学工作中,您可能需要将numpy数组和pandas DataFram ...

  6. python的字符串、列表、元组、字典、集合

    python数据类型 前言 一.字符串 二.列表 三.元组 四.字典 五.集合 前言 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tupl ...

  7. python列表操作计算列表长度并输出_Python成为专业人士笔记–List列表

    专业人士笔记"系列目录:创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!​zhuanlan.zhihu.com Python列表是Python程序中广泛使用的一种通用数据 ...

  8. python for 循环中使用 remove 删除列表中的元素

    python for 循环中使用 remove 删除列表中的元素 错误的代码 # !/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- o ...

  9. python中字典长度可变吗_python中列表长度可变吗

    python中列表长度可变吗?下面给大家介绍一下python中可变和不可变的类型: 可变.不可变 可变/不可变类型,指的是:内存id不变,type也不变的前提下,value是否是可变的. int()和 ...

最新文章

  1. 分离硬件和代码、稳定 API,PyTorch Lightning 1.0.0 版本正式发布
  2. Django博客系统(首页文章数据展示)
  3. iOS点滴- ViewController详解
  4. 【Echarts】 绘制世界地图和中国省份
  5. javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)...
  6. 【教程】超漂亮的CSS3按钮制作教程
  7. mysql 中报1062_mysql error 1062 问题解决
  8. 俄亥俄州立大学计算机科学转学成功,俄亥俄州立大学转学成功率83.38%!!
  9. 利用递归的方法求最大公约数和最小公倍数(Java)
  10. (c语言)求x的y次方
  11. tkinter GUI 客户端页面编程 登录注册案例开发
  12. 使用Lingo求解简单的线性规划问题
  13. 家用电器插头插座外壳防冲击等级试验——IK摆锤冲击试验装置
  14. 万物皆为叠加态粒子:如何用量子物理学诠释生活?
  15. c语言编程实现今日星期几,计算任何一天是星期几的C语言源代码.
  16. 大数据、云计算该如何学习?
  17. 学习matlab(六)——微分和积分
  18. 知名学者,全职加盟C9高校!
  19. 研发新人如何快速熟悉新项目和业务
  20. java谐音梗_你听过最好玩的英语谐音梗是?

热门文章

  1. 如何用Chrome自带的截屏功能截取超过一个屏幕的网页 1
  2. centos 利用yum更新git
  3. Excel2013数据透视表、Power View中的钻取
  4. 【论文笔记】分层强化学习鼻祖:Feudal Reinforcement Learning 1993
  5. 【操作系统/OS笔记04】内存分层体系、地址生成、连续内存分配概论
  6. 开源地图引擎openlayers_由quot;地图quot;到quot;指南针quot;:疫后智能营销的演化逻辑...
  7. excel中如何批量将所有的网址设为超链接
  8. python websocket实现消息推送_python Django websocket 实时消息推送
  9. windows下bat批处理实现守护进程
  10. windows 实验报告