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

1.测试代码

运行代码

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

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

效果如下
Python新手常见问题——列表中删不掉的0_第1张图片

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 列表中的所有非零元素。

你可能感兴趣的:(Python,python)