一边遍历列表,一边修改列表甚至删除列表元素所带来的结果混乱

具体地,假设列表中存在k个值为a的元素,删除前k-1个元素,保留最后一个,不同元素在列表中的相对位置不应被改变。这是我们今天要执行的程序: 

v = list(eval(input()))
print("before:",v)

for x in v:#正序输出
    cnt = v.count(x)
    if cnt >= 2:
        for i in range(cnt-1):
            v.remove(x)

结果:

你们看并没有得到想要的结果,这是什么原因呢:就是一边遍历列表一边修改列表甚至删除列表元素可能使得遍历发生混乱,产生意料之外的结果。修改如下:

v=list(eval(input()))#输入多个元素,生成列表
print("before:",v)#输出开始的列表
for x in v[::-1]:#倒序循环
    numbers=v.count(x)#计算相同元素的数量
    if numbers >=2 :#如果有重复的
            for i in range(numbers-1):
                v.remove(x)#就删除前面所有相同的元素,就剩下最后一个
print("after:",v)#输出删除相同元素后的列表


结果:

倒序之后就不会这样了,因为删除该元素的时候并没有循环到该元素,这样就不会发生混乱了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Li。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值