Python新手常见问题——列表中删不掉的0

文章讨论了在Python中循环删除列表元素可能导致的问题,尤其是在迭代过程中修改列表。提出了两种方法:一是在循环外创建新列表,只添加非零元素;二是使用列表解析式。这两种方法可以避免在迭代中修改列表带来的意外行为。
摘要由CSDN通过智能技术生成

1.测试代码

运行代码

nums1 = [1,2,3,0,0,0]
print(type(nums1))

for i in nums1:
    if i == 0:
        nums1.remove(i)
print(nums1)

效果如下
在这里插入图片描述

2.疑问:

上面代码,为什么把nums1里面的0移除不干净

3.原因:

在 Python 中,不建议在循环中直接修改正在迭代的列表,因为这可能会导致意外的行为。在你的代码中,当第一个 0 被移除后,后面的两个 0 的索引位置就发生了变化,但是循环的索引却没有跟着更新。这样就会导致第二个 0 没有被完全移除。

如何处理

方法一

在循环之外创建一个新的列表,并仅将非零元素添加到其中,例如:

nums1 = [1, 2, 3, 0, 0, 0]
new_nums1 = []

for i in nums1:
    if i != 0:
        new_nums1.append(i)

print(new_nums1)

这个方法将创建一个新的空列表 new_nums1,然后遍历 nums1 列表中的每个元素。只要该元素不是 0,就将其添加到 new_nums1 列表中。最终,new_nums1 列表中将只包含非零元素。

方法二:

使用列表解析式,如下所示:

nums1 = [1, 2, 3, 0, 0, 0]
nums1 = [i for i in nums1 if i != 0]
print(nums1)

这个方法使用列表解析式来创建一个新的列表,其中包含 nums1 列表中的所有非零元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今晚务必早点睡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值