gpt4 book ai didi

Python 嵌套 for 循环行为

转载 作者:太空狗 更新时间:2023-10-30 02:04:42 25 4
gpt4 key购买 nike

我在嵌套 for 循环中遇到了这种奇怪的行为,但我无法就此进行解释。这是特定于 Python 的东西还是我只是在监督什么?

这是我正在运行的代码:

for i in range(16):
if i == 0:
for j in range(8):
print 'i is (if) ' + str(i)
i = i + 1
else:
print 'i is (else)' + str(i)

这是我得到的输出:

i is (if) 0
i is (if) 1
i is (if) 2
i is (if) 3
i is (if) 4
i is (if) 5
i is (if) 6
i is (if) 7
i is (else)1
i is (else)2
i is (else)3
i is (else)4
i is (else)5
i is (else)6
i is (else)7
i is (else)8
i is (else)9
i is (else)10
i is (else)11
i is (else)12
i is (else)13
i is (else)14
i is (else)15

这是我期待的输出:

i is (if) 0
i is (if) 1
i is (if) 2
i is (if) 3
i is (if) 4
i is (if) 5
i is (if) 6
i is (if) 7
i is (else)8
i is (else)9
i is (else)10
i is (else)11
i is (else)12
i is (else)13
i is (else)14
i is (else)15

似乎外层 for 循环中的 i 和内层 for 循环中的 i 是不同的变量,尽管这对我来说似乎完全违反直觉。

任何输入(我是 python 的新手,但找不到这方面的文档)

最佳答案

for循环将一个值赋给i每次循环迭代,即从可迭代循环中获取的下一个值(在本例中为 range(16)

可以修改i在循环本身中,但这不会改变可迭代的 for正在与.

如果您想更改循环可迭代对象,那么您必须直接在可迭代对象上这样做:

loop_iterable = iter(range(16))
for i in loop_iterable:
if i == 0:
for j in range(8):
print 'i is (if) ' + str(i)
i = next(loop_iterable)
else:
print 'i is (else)' + str(i)

在这里,我们创建一个 iterator object来自 range(10)使用 iter() function 排序; for语句在幕后做了完全相同的事情,但现在我们可以直接访问迭代器。 next() function将迭代器前进到下一个值,就像 for循环就可以了。

但是,使用 while 可能更容易循环代替:

i = 0
while i < 16:
if i == 0:
for j in range(8):
print 'i is (if) ' + str(i)
i = next(loop_iterable)
else:
print 'i is (else)' + str(i)
i += 1

要记住的是 Python for循环语句没有什么像 C 或 Java 或 JavaScript for环形。这是一个 Foreach loop反而。 range()简单地生成一个数字序列来循环,而不是 C 风格的 for循环,它将初始赋值 ( i = 0 )、测试 ( i < 16) ) 和循环增量器 ( i += 1 ) 组合到一个语句中。

关于Python 嵌套 for 循环行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18108363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com