下面的代码仅运行两次。不知道为什么会这样。
a=[1,2,3,4]
count=0
for letter in a:
print(letter)
b=a.pop()
count+=1
print("total loop count is "+str(count))
我希望循环应该运行四次。
如果我注释/删除行b=a.pop()
,则循环运行四次。
我希望程序退出循环后计数的打印数应该是四,但是计数的实际输出打印数是2。
答案 0 :(得分:7)
不带参数的list.pop()
方法将删除列表的最后一项。检出the documentation。
所以基本上发生的是:
通常,在迭代集合的元素时修改集合是一种不好的做法。这样做通常会导致意想不到的行为。
答案 1 :(得分:2)
第一步: 打印第一个元素,删除第四个元素
第二步: 打印第二个元素,删除第三个元素
...没有元素可打印。
答案 2 :(得分:0)
因为您使用以下行更改了迭代器a
的元素大小:
b=a.pop()
每次运行该行时,列表a
将删除其最后一个元素,并且其大小将减小1。
获得期望的最简单方法是使迭代器在第3行for letter in a[:]
不变:
a=[1,2,3,4]
count=0
for letter in a[:]:
print(letter)
b=a.pop()
count+=1
print("total loop count is "+str(count))
,输出将正确:
1
2
3
4
total loop count is 4
答案 3 :(得分:0)
一些改进的代码
a=[1,2,3,4]
count=0
while len(a)>0:
count+=1
print(a[-1])
a.pop()
print("total loop count is {}".format(count))
答案 4 :(得分:0)
只是了解概念。使用 enumerate()知道迭代的次数,第二次调用pop时, len(a)变为2(这意味着没有第三项进行第三次迭代打印)。 运行下面的代码一次以获得更好的主意。建议不要在for循环内的列表中弹出或删除。
count=0
for iteration_count,letter in enumerate(a):
print("Index Value:",iteration_count)
b=a.pop()
print("Length of a:",len(a))
count+=1
print("total loop count is "+str(count))
以下代码可以帮助您弹出所有项目。
count=0
while a:
a.pop()
print(a)