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