为什么"for"循环比循环的body多执行一次?
Why does the "for" loop execute one more time than the body of the loop?
在Introduction to Algorithms一书中,标题Analysis of Insertion Sort下有一行是这样写的:
"When a for or while loop exits in the usual way (i.e., due to the test in the loop header), the test is executed one time more than the loop body."
据我所知,for 循环使用迭代变量的计数器。因此,例如,通过执行代码:
for j in range(0,3):
print(j)
在python中,我们得到结果:
0
1
2
迭代变量j只遍历值0、1和2。所以for循环和body 循环都只执行三次。
这里有人问过类似的问题:
但是,我认为OP混淆了for循环和while循环的机制。问题的答案似乎支持他的误解。
在您的 Python 示例中,do_something() 在循环中
for j in range (0,n):
do_something()
被执行了n-1次,因为范围的上限是non-inclusive。所以会在j=0,j=1,...j=n-1时执行。循环本身将再执行一次(即当 j=n 时)并发现该值不再在范围内并且不会执行循环体。
所以这就是 for-loop 比主体多执行一次的原因。
当然,同样的推理也适用于 for
个循环。
这是因为对循环条件的求值总是比对循环体的执行多一次。
举个简单的例子:
x = 4
while x < 0:
x += 1
print('hello')
我们可以看到循环体从未执行过(0
次),而循环的退出条件 被计算一次(1
时间).
因此,在任何情况下,我们都有以下内容:
每次条件评估为 True
时,循环体执行一次
和
条件再次被评估为 False
,程序退出循环。
在Introduction to Algorithms一书中,标题Analysis of Insertion Sort下有一行是这样写的:
"When a for or while loop exits in the usual way (i.e., due to the test in the loop header), the test is executed one time more than the loop body."
据我所知,for 循环使用迭代变量的计数器。因此,例如,通过执行代码:
for j in range(0,3):
print(j)
在python中,我们得到结果:
0
1
2
迭代变量j只遍历值0、1和2。所以for循环和body 循环都只执行三次。
这里有人问过类似的问题:
但是,我认为OP混淆了for循环和while循环的机制。问题的答案似乎支持他的误解。
在您的 Python 示例中,do_something() 在循环中
for j in range (0,n):
do_something()
被执行了n-1次,因为范围的上限是non-inclusive。所以会在j=0,j=1,...j=n-1时执行。循环本身将再执行一次(即当 j=n 时)并发现该值不再在范围内并且不会执行循环体。
所以这就是 for-loop 比主体多执行一次的原因。
当然,同样的推理也适用于 for
个循环。
这是因为对循环条件的求值总是比对循环体的执行多一次。
举个简单的例子:
x = 4
while x < 0:
x += 1
print('hello')
我们可以看到循环体从未执行过(0
次),而循环的退出条件 被计算一次(1
时间).
因此,在任何情况下,我们都有以下内容:
每次条件评估为 True
时,循环体执行一次
和
条件再次被评估为 False
,程序退出循环。