python bug日志:python for循环遍历列表 后续元素不能遍历到问题

开篇先说结论:python中

for item in list

退出的判断条件是循环次数等于表长就跳出;
所以,如果在循环的过程中删除元素,可能就会导致提前终止循环。


下面是我个人练习时出现此错误的代码

guests = ['李白', '杜甫', '苏轼']
guest1 = '苏辙'
guest2 = '汪伦'
guest3 = '孟浩然'
guests.insert(0, guest1)
guests.insert(int(len(guests) / 2), guest2)
guests.append(guest3)
print(guests)
for guest in guests:
    if len(guests) > 2:
        print(guests.pop(0) + "先生,抱歉,人数过多")
        print(len(guests))
    else:
        print(guest + "欢迎你")
del guests[0]
del guests[0]
print(guests)

输出为
[‘苏辙’, ‘李白’, ‘汪伦’, ‘杜甫’, ‘苏轼’, ‘孟浩然’]
苏辙先生,抱歉,人数过多
5
李白先生,抱歉,人数过多
4
汪伦先生,抱歉,人数过多
3
[‘孟浩然’]
显然for循环只执行了三次,这是因为pop指令将元素弹出了,表长减短,执行三次后,循环次数等于表长,所以导致for循环结束

修改后为

# 3-6
guests = ['李白', '杜甫', '苏轼']
guest1 = '苏辙'
guest2 = '汪伦'
guest3 = '孟浩然'
guests.insert(0, guest1)
guests.insert(int(len(guests) / 2), guest2)
guests.append(guest3)
print(guests)
for num in range(0, 6):
    if len(guests) > 2:
        print(guests.pop(0) + "先生,抱歉,人数过多")
    else:
        print(guests[num-4] + "欢迎你")
del guests[0]
del guests[0]
print(guests)

用range的方式做循环的时候,首先使num=num1,之后依次加一,判断继续循环条件是num<num2(所以num2不能循环到,num1如果大于等于num2会直接不进入循环)

for num in range(num1,num2)

最后输出为
[‘苏辙’, ‘李白’, ‘汪伦’, ‘杜甫’, ‘苏轼’, ‘孟浩然’]
苏辙先生,抱歉,人数过多
李白先生,抱歉,人数过多
汪伦先生,抱歉,人数过多
杜甫先生,抱歉,人数过多
苏轼欢迎你
孟浩然欢迎你
[]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值