观察下面两种循环,它们的输出结果相同吗?
print("#### for 循环 ####")
a = [0] * 6
for i in range(len(a)):
print(i)
a.pop()
print("#### while 循环 ####")
a = [0] * 6
i = 0
while i < len(a):
print(i)
a.pop()
i += 1
如果你以为的输出结果是这样子的:
#### for 循环 ####
0
1
2
#### while 循环 ####
0
1
2
那就错了! 真实的输出结果是:
#### for 循环 ####
0
1
2
3
4
5
#### while 循环 ####
0
1
2
这是因为:
for
循环的范围在循环开始之前就会被确定,并且不会受到循环体内操作的影响。这意味着无论循环体内部是否修改了列表的长度,for
循环的范围仍然保持不变。while
循环的判断条件在每次循环迭代开始时都会重新计算。因此,当你使用while
循环迭代一个变化的列表时,循环的条件会在每次迭代时重新检查,并且会在条件不再满足时结束。
由此可以看出,在一个长度动态减少的数组上进行遍历时,如果循环体内含有索引操作,那么使用 for
循环极有可能导致 IndexError: list index out of range
!
综上,如果希望循环是可变的,那么请使用 while
循环。