python - for i in list 如果列表变动的话

for...in 列表时,删除列表元素中的陷阱和解释 删除列表中的偶数 ​ num = [2,3,4,5,6,7] for i in num: if i % 2 ==0: num.remove(i) print(num) num1 = [2,4,5,6,7] for i in num1: if i % 2 ==0: num1.remove(i) print(num1) 结果: [3, 5, 7] [4, 5, 7] 原因: 第一个列表num=[2,3,4,5,6,7]中,删除第一偶数"2"后,列 阅读详情
l1=list(range(10))
for i in range(len(l1)):
    l1.pop()
    print(i,l1,l1[-1])
#
0 [0, 1, 2, 3, 4, 5, 6, 7, 8] 8
1 [0, 1, 2, 3, 4, 5, 6, 7] 7
2 [0, 1, 2, 3, 4, 5, 6] 6
3 [0, 1, 2, 3, 4, 5] 5
4 [0, 1, 2, 3, 4] 4
5 [0, 1, 2, 3] 3
6 [0, 1, 2] 2
7 [0, 1] 1
8 [0] 0
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-41-ca6fe5f266d2> in <module>
      2 for i in range(len(l1)):
      3     l1.pop()
----> 4     print(i,l1,l1[-1])

IndexError: list index out of range
l1=list(range(10))
for i in l1:
    l1.pop()
    print(i,l1,l1[-1])
#
0 [0, 1, 2, 3, 4, 5, 6, 7, 8] 8
1 [0, 1, 2, 3, 4, 5, 6, 7] 7
2 [0, 1, 2, 3, 4, 5, 6] 6
3 [0, 1, 2, 3, 4, 5] 5
4 [0, 1, 2, 3, 4] 4

for i in 的实质,后面是带iterable的,当这个可迭代结束后,for就结束了。
而i,他属于从索引0开始顺序遍历的iterable对应索引位置上的数值。

如果这不好理解的话,那么来个另类的操作,for的时候,增加迭代目标的长度

l1=list(range(10))
for i in l1:
    l1.append(i*-1)
    print(i,l1)
    if len(l1)==30:break
#
0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1]
2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2]
3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3]
4 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4]
5 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5]
6 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6]
7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 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 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0]
-1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, 1]
-2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, 1, 2]
-3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, 1, 2, 3]
-4 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, 1, 2, 3, 4]
-5 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, 1, 2, 3, 4, 5]
-6 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, 1, 2, 3, 4, 5, 6]
-7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 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, 0, 1, 2, 3, 4, 5, 6, 7, 8]
-9 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l1=list(range(10))
for i in range(len(l1)):
    l1.append(i*-1)
    print(i,l1)
    if len(l1)==30:break
#
0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1]
2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2]
3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3]
4 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4]
5 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5]
6 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6]
7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 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 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

目前都是我们的实验框架,但实际操作时,忽略这个问题,误操作,就会出现不可控的情况

l1=list(range(10))
for i in l1:
    l1.append(i*-1)
    print(i,l1)
    del l1[:] # l1.clear()
#
0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
l1=list(range(10))
for i in l1:
    l1.append(i*-1)
    print(i,l1)
    del l1
#
0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-47-6e65032a4b1d> in <module>
      1 l1=list(range(10))
      2 for i in l1:
----> 3     l1.append(i*-1)
      4     print(i,l1)
      5     del l1

NameError: name 'l1' is not defined

唯独这个不好解释

for i in list,只运行一次,定位到list,不再变化for的内容

总的来说,当运行到for i in list的时候,这里就固定了的,固定了iterable的目标,就像是铺了铁轨,for内的代码在这个铁轨上运行,除非有意为之,否则要避免铁轨的内容变动。

之前看到避免使用for的情况,大概就指的这个,虽然那文章可能是噱头居多。

例如我们用循环,跳出方式无非规定次数、遍历完元素、规定跳出情况。
while也是完全可以做到的,但是写起来就复杂一些,那么这里捎带对比下for和while的效率

for i in range(1000):
	""
# 18.4 µs ± 241 ns
i=0
while i!=1000:
    i+=1
# 56.5 µs ± 1.58 µs
for i in l:
    ""
# 10.7 µs ± 282 ns
i=0
while i!=1000:
    l[i]
    i+=1
# 96.1 µs ± 2.73 µs

我停止了思考

Python列表专题:listin Python中,列表是一种可变的数据结构,可以存储任意数量的元素,元素可以是不同类型。列表用方括号[]定义,元素之间用逗号分隔。in运算符用于判断某个元素是否存在于列表中,返回布尔值True或False。else:本文对Python列表及其与in运算符的结合使用进行了深入探讨。我们学习了如何创建和操作列表in运算符的基本用法,以及在实际应用中的效率考虑。通过实践案例,我们展示了如何使用列表构建简单的应用程序。随着数据科学和人工智能等领域的发展,列表的使用将继续增长。 阅读详情

相关推荐

生成式引擎优化(GEO):启动GEO优化的5个有效策略

随着生成式AI的普及,传统SEO正被GEO(生成式引擎优化)取代。本文提出GEO五大核心策略:用户意图解析、结构化内容设计、语义关键词优化、对话式内容创作和权威信源建设。研究表明,优化后的内容在AI答案中的引用率提升300%,点击率增长27%。文章还介绍了BERT模型、Schema标记等关键技术工具,并指出未来GEO将向多模态优化、实时数据更新方向发展。企业需避免简单堆砌关键词,应建立长期内容策略,通过结构化、权威性内容在AI时代保持竞争优势。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 2706

pythonfor in的用法pythonfor in的用法

for in 说明:也是循环结构的一种,经常用于遍历字符串、列表,元组,字典等 格式: 1 2 forxiny: 循环体 执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束。 例1:遍历字符串 1 2 3 s='Iloveyoumorethanicansay' foriins: print(i) 例2:遍历列表 ...

GIS112216的博客 3万+

Python《打砖块》小游戏

Python《打砖块》小游戏!

PanDaoxi 1255

Python循环语句

python中常常需要循环,遍历的操作,因此python有循环语句可以满足这些需求。

m0_74043494的博客 2026

Python -- 列表

1. 列表 列表概述: Python中的列表是由一系列按特定顺序排列的元素组成的。 它是Python中内置的可变序列。在形式上,列表的所有元素都放在一对中括号“[]”中, 两个相邻元素间使用逗号“,”分隔。 在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入到列表中 1.1 列表的创建与删除 1.2 列表元素的访问与遍历 1.3 列表元素的常用操作 添加元素的方法 删除元素的方法 修改元素的方法 查找元素方法 1.4 列表元素的统计与排序 列表

天行健 君子以自强不息,地势坤 君子以厚德载物。 3078

python 小技巧 列表 for i in list: 和 for i in list[ : ]的区别

代码一: def test(l): s = [1,2,3] for i in range(len(s)): for st in l: st = st + [s[i]] l.append(st) return l if __name__ == "__main__": nums = [[],] ...

weixin_39776217的博客 2万+

python创建列表 for i in_Python列表解析 (「x for x in list」)

列表解析Python的强大特性之一是其对列表(list)的解析,它提供了一种紧凑的方法,可以通过对list中的每个元素应用一个函数,从而将一个list映射为另一个list列表解析,又称列表推导式(List Comprehensions)列表解析比for更精简,运行更快,特别是对于较大的数据集合列表解析是Python迭代的一种应用,它常用于实现创建新的列表,返回的是一个列表一个简单的例子生成1*1...

weixin_39517560的博客 6220

Python中的for i in range(range()函数的for循环)如何使用,详细介绍

range函数的for循环1.定义2.两种形式3.可理解性例子4.range函数的特性详述4.1 左闭右开4.2 开始值默认为04.3 步长值默认为14.4 range函数的反向输出5.与列表list的使用6.range与list的区别 1.定义 range是一个函数,它返回的是一个可迭代对象,大多使用于for循环中。相当于C/Java 里面的 for (int i = m; i < n;...

宝藏女孩的成长日记 34万+

python for i in range(len())_python - Pythonfor循环 - for i in range(0,len(list)vs i for list in lis...

如果您打开口译员并执行以下操作:help(range)你会得到这个:Help on built-in function range in module __builtin__:range(...)range(stop) -> list of integersrange(start, stop[, step]) -> list of integersReturn a list conta...

weixin_40007804的博客 7682

Python列表list)的详细使用

列表Python中常见的数据结构,列表中的数据项可以是不同的数据类型,如整型、字符、字典、列表等。我们可以对列表进行添加、删除、修改、排序等操作。

m0_74968078的博客 4万+

python列表解析—[x for x in list]

python列表解析—[x for x in list]

sodaloveer的博客 4011

Python 列表解析 例子 讲解 学习 list comprehension in python demo

诚实 概念 首先说一下什么是列表解析: 基本概念就是一种语法结构,其存在是为了方便通过已有列表,去方便快速创建新的列表。 [expression for target1 in iterable1 [if condition1] for

李梦龙的成长笔记 1万+

介绍python中几种遍历列表for循环方法

我们在使用列表的过程中,经常需要遍历列表的所有元素,对每个元素执行相同的操作。今天就给大家介绍python中几种遍历列表for循环方法。 首先我们先构造一个numbers列表,如下: numbers = [12, 454, 123, 785, 65] 直接使用for循环简单结构遍历: 直接使用简单的for循环结构" for i in list: print(i) ",其中代码中的 i 可以自由命名,代码中的 list列表的名称,冒号后面的代码换行并缩进。代码如下: # -*- codin

u010741112的博客 3万+

[Python学习笔记2]——列表的进阶操作

这段代码中首先创建了一个名为my_foods的食品列表,然后创建了一个名为friend_foods的新列表,在不指定任何引的情况下从列表my_foods中提取一个切片,从而创建了这个列表的副本,再将该副本存储到变量friend_foods中。需要注意的是,range(1,5)只是打印数字1~4,并且range(1,5)并不会生成一个包含数字1~4的数组。可以看到,原列表的输出与复制后列表的输出结果不同,说明原列表与复制的列表是互相独立的。使用函数range()时,还可指定步长。

matlabxiao1的博客 1775

pythonfor i in list 陷阱

d = [1,2,3,4,5] for i in d: d.remove(i) print d结果是 :[2, 4]这个陷阱比较隐蔽,我再用白盒子测试的时候,发现了这个bug,大致原因就是remove d[0]之后,i 自动变成了 d[1], 但是 d已经变成了 d[2,3,4,5],所以i=d[1]就悲催的指向了3,跳过了2!看来python还是要注意了解底层实现啊!解决办法是:d = [

Silly2016的博客 2万+

Python基础 - 初识列表list 有序可变的元素序列

Python列表基础总结 🎯 列表(list)是Python最核心的数据结构之一,具有有序可变的特性。通过方括号[]创建,支持混合数据类型存储。关键操作包括: 索引访问 - 从0开始的正向索引和-1起始的负向索引 切片操作 - [start:stop:step]实现灵活的子序列提取 元素修改 - 通过append()/extend()/insert()添加元素,remove()/pop()删除元素 排序反转 - sort()和reverse()方法实现排序功能 列表的底层采用动态数组实现,自动处理内存扩容

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Python列表list遍历元素

参考文章:https://blog.csdn.net/pwh309315228/article/details/79093679 前言:颈椎病犯了,妈蛋,好疼 0、直接上干货,第一种:for in girl_list = ["貂蝉", "狐狸精","范金链","翠花","小班"] for everyOne in girl_list: print(everyOne) 输出结...

王员外的博客 2254

Python在方括号中使用for循环,类似[0 for i in range(10)],叫 列表解析List Comprehensions

https://www.cnblogs.com/liu-shuai/p/6098227.htmlPython 列表解析作者博文地址:https://www.cnblogs.com/liu-shuai/列表解析  根据已有列表,高效创建新列表的方式。  列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中。语法:  [expression for iter_val in...

qq_27361945的博客 16万+

python列表解析([ x for x in list])

转载至 列表解析 定义和说明 >Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 list。 >列表解析,又叫列表推导式( list comprehension) >列表解析比 for 更精简,运行更快,特别是对于较大的数据集合 >列表解析可以替代绝大多数需要用到 map和 filt

xuxiao1991101的博客 3万+

Python for i in range 的5个反模式:从新手到专家的避坑指南

本文揭示了Python中`for i in range`的5个常见反模式,从新手到专家都应避免这些陷阱。通过对比反模式与优化方案,介绍了更Pythonic的迭代方式,如直接迭代、使用`enumerate`、`zip`和`reversed`等内置函数,提升代码可读性和效率。

408

1992-2024年全国及各省人均国内生产总值/人均GDP数据(无缺失)

1992-2024年全国及各省人均国内生产总值/人均GDP数据(无缺失)1、时间:1992-2024年2、来源:国家统计J、统计年J3、指标:人均国内生产总值/人均GDP4、范围:全国及31省5、缺失情况:无缺失

上一篇: python - 组合算法分析
下一篇: python - 列表copy与[:]
一心月
博客等级 码龄19年 39粉丝 143原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值