为什么输出不是3呢?为什么是2?
lst=[34,6,7,0,0,0,9]
n=0
for i in lst:
if i==0:
lst.remove(i)
n+=1
print(n)
为什么输出不是3呢?为什么是2?
lst=[34,6,7,0,0,0,9]
n=0
for i in lst:
if i==0:
lst.remove(i)
n+=1
print(n)
在迭代列表的同时修改它的长度可能导致意外的行为。在你的代码中,当遇到第一个零时,lst
的长度被修改,导致后续元素的索引发生变化。这可能导致一些元素被跳过或被重复计数。
在这个特定的例子中,当你移除第一个零时,列表变为 [34, 6, 7, 0, 0, 9]
,然后循环继续。当循环到第三个元素时,它是列表中的第一个零(原来的第二个零),但由于列表已经被修改,这个零被跳过了。因此,实际上只有两个零被计数。
为了避免这个问题,你可以创建一个新的列表,或者使用列表推导式来过滤出不等于零的元素。以下是一种修正的方式:
lst = [34, 6, 7, 0, 0, 0, 9]
n = sum(1 for i in lst if i == 0)
print(n)
这种方式避免了在迭代过程中修改列表长度,因此输出将是3,对应于列表中的三个零。