为什么python中不建议在for循环中修改列表
2个回答
展开全部
对这个list进行操作。
a = [1, 2, 3, 4, 5, 6]
首先,将里面值为3的元素修改为4。我们可以写成这样。
for i in range(len(a)):
if a[i] == 3:
a[i] = 4
或者这样
for i, v in enumerate(a):
if v == 3:
a[i] = 4
结果变成了这样:
a = [1, 2, 4, 4, 5]
好像用for循环完成得挺顺利的,但是列表的修改,不仅限于对值得修改,还有插入和删除。
接着上一步,我们现在要尝试删除里面所有值为4的元素。
for i, v in enumerate(a):
if v == 4:
del a[i]
然而,得到却是
a = [1, 2, 4, 5]
如果写成这样
for i in range(len(a)):
if a[i] == 4:
del a[i]
python直接就报错了
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: list index out of range
由于在遍历的过程中,删除了其中一个元素,导致后面的元素整体前移,导致有个元素成了漏网之鱼。同样的,在遍历过程中,使用插入操作,也会导致类似的错误。这也就是问题里说的无法“跟踪”元素。
如果使用while,则可以在面对这样情况的时候灵活应对。同样是上面那个例子。
i = 0
while i < len(a):
if a[i] == 4:
del a[i]
else:
i += 1
a = [1, 2, 3, 4, 5, 6]
首先,将里面值为3的元素修改为4。我们可以写成这样。
for i in range(len(a)):
if a[i] == 3:
a[i] = 4
或者这样
for i, v in enumerate(a):
if v == 3:
a[i] = 4
结果变成了这样:
a = [1, 2, 4, 4, 5]
好像用for循环完成得挺顺利的,但是列表的修改,不仅限于对值得修改,还有插入和删除。
接着上一步,我们现在要尝试删除里面所有值为4的元素。
for i, v in enumerate(a):
if v == 4:
del a[i]
然而,得到却是
a = [1, 2, 4, 5]
如果写成这样
for i in range(len(a)):
if a[i] == 4:
del a[i]
python直接就报错了
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: list index out of range
由于在遍历的过程中,删除了其中一个元素,导致后面的元素整体前移,导致有个元素成了漏网之鱼。同样的,在遍历过程中,使用插入操作,也会导致类似的错误。这也就是问题里说的无法“跟踪”元素。
如果使用while,则可以在面对这样情况的时候灵活应对。同样是上面那个例子。
i = 0
while i < len(a):
if a[i] == 4:
del a[i]
else:
i += 1
TableDI
2024-07-18 广告
2024-07-18 广告
当我们谈到Python与Excel的拆分时,通常指的是使用Python的库来读取Excel文件中的数据,然后根据某种逻辑(如按行、按列、按特定值等)将数据拆分成多个部分或输出到新的Excel文件中。上海悉息信息科技有限公司在处理这类任务时,...
点击进入详情页
本回答由TableDI提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询