不理解if语句后面的for循环中的Python索引



我有以下代码:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
to_find = 5
found = False
for i in range(len(my_list)):
found = my_list[i] == to_find
if found:
break
if found:
print("Element found at index", i)
else:
print("absent")

我知道在Python中使用while或for循环和后面的else语句的具体概念。所以我明白,如果我有一个break语句和后面的else语句,这是一个特定的Python实现。

然而,我认为在我的例子中这个特定的概念并不适用。还是?

我有一个for循环,索引I从开始到结束。当循环结束时(或中断,不管if语句是否执行,它都不需要对for循环做任何操作),if语句被执行。现在,我不明白为什么带有以下print ("…", I)代码的if found:语句没有抛出错误。

我希望在运行print语句的时间点上I是未知的。i是for循环中的内部索引变量。所以对我来说,这首先不是一个"全球"变量,其次,我不会期望I是"保存"的。所以它确实包含了最后一个i的编号。我可以从输出代码中清楚地看到这一点。

为什么在print("Element found at index", i)运行的时间点i是已知的?还是只知道因为我的假设是错误的,并且for循环中的break语句对于能够执行下面的if语句而不会出错很重要?

for循环没有一个作用域。i的值为循环终止时的值或range最后生成的值。

同样,i是在循环迭代时定义的。

最新更新