【Python初学笔记】为甚么for循环遍历列表时最好不要修改列表

#以下两段代码均企图实现通过循环将一个列表元素逐个转移到第二个列表当中
# 我将通过两段代码分析为甚么for循环不适合这类中途需要更改列表内容的操作
# (对应书《从入门到实践》111)
table1=["a","b","c"]
table2=[]
for a in table1:#该for循环企图遍历列表中每遍历一个元素就删除它并移动到列表2(用del方法)
    print(f"we had delete '{a}' in the table1???")#for循环执行与否在于是否完成了遍历
    table2.append(a)
    del(table1[0])
print(table1)
print(table2)
#然而结果是没能删除与移动列表1中元素“c”,这是因为第一次遍历到第一个元素“a”,第一个元素被删除-
#并且移动;第二遍遍历时候默认遍历索引[1],而此时列表1由于第一个元素被删除,所有余下元素全部左移-
#导致此时遍历到了“c”,而不是“b”,直接跳过了b,然而del方法默认删除0号元素,删除了列表1的“b”,导致-
#“b”元素没能被添加到列表2,却被成功删除了,打印的结果也是混乱不堪,之后更多元素更是一坨乱麻
#从以上教训可知,最好不要在遍历列表中修改列表,会导致许多逻辑错误与输出混乱
#所以我们用while循环代替for循环,再也不用关心列表是否被修改的问题
#——————————————————————————————————————————————————————————————————————————————————————
print("\n\n————————————————————————————————分界线——————————————————————————————————————\n\n")
#——————————————————————————————————————————————————————————————————————————————————————
table3=["a","b","c"]
table4=[]
while table3:#while循环执行与否取决于返回值是True还是False,这里列表非空就是True
    temporary1=table3.pop()
    print(f"we had delete '{temporary1}' in the table1")
    table4.append(temporary1)
table4.reverse()#由于pop方法是从尾巴开始弹出元素的,需要对生成元素予以修改(排序)
print(table3)
print(table4)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值