Python中关于可变循环的一些坑

观察下面两种循环,它们的输出结果相同吗?

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 循环。

猜你喜欢

转载自blog.csdn.net/raelum/article/details/132265007