Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
而在Python3.x中,for循环内部的循环并没有改变for循环i的值_Python_Python 3.x_For Loop_While Loop_Python 3.6 - Fatal编程技术网

而在Python3.x中,for循环内部的循环并没有改变for循环i的值

而在Python3.x中,for循环内部的循环并没有改变for循环i的值,python,python-3.x,for-loop,while-loop,python-3.6,Python,Python 3.x,For Loop,While Loop,Python 3.6,这是我的密码 A = [0,0,-1,0] for i in range(len(A)): while (i<len(A)) and (A[i] >=0): print(i, A[i]) i=i+1 我的问题是: 当while循环第一次退出时,i的值变为2,因为A[2]

这是我的密码

A = [0,0,-1,0]
for i in range(len(A)):
    while (i<len(A)) and (A[i] >=0):
        print(i, A[i]) 
        i=i+1
我的问题是: 当while循环第一次退出时,
i
的值变为
2
,因为
A[2]<0

但在这之后,当它转到循环的父级时,为什么
i
的值再次变为
1


因为在输出的第三行之后,它会再次打印
10

问题发生在while循环退出之后。i设置为
范围(len(A))
中的下一个值,对于for循环的下一次迭代为1

您可以通过初始化i并删除for循环来修复此问题

A = [0,0,-1,0]
i=0
while (i<len(A)) and (A[i] >=0):
   print(i, A[i]) 
   i=i+1

问题发生在while循环退出之后。i设置为
范围(len(A))
中的下一个值,对于for循环的下一次迭代为1

您可以通过初始化i并删除for循环来修复此问题

A = [0,0,-1,0]
i=0
while (i<len(A)) and (A[i] >=0):
   print(i, A[i]) 
   i=i+1

Python
for
循环与C
for
循环不同;迭代值在每个循环上被替换,放弃在循环内所做的任何更改。无论您对
for
循环中的
i
做什么,当
for
循环时,您从迭代器中提取下一个值,因此
i
将始终通过
范围中的所有值,一次一个。

Python
for
循环与C
for
循环不同;迭代值在每个循环上被替换,放弃在循环内所做的任何更改。无论对
for
循环中的
i
执行什么操作,当
for
循环时,从迭代器中提取下一个值,因此,
i
总是一次一个地遍历
范围中的所有值。

for语句不像在C中那样工作。每次迭代都会重新分配i变量


您可以将“for i in x”想象成更像:当x有更多值时,将i设置为x中的下一个值。

for语句不像在C中那样工作。每次迭代都会重新分配i变量


您可以将“x中的i”想象为:当x有更多值时,将i设置为x中的下一个值。

尝试在任何Python调试器中运行代码,您将立即看到它。 代码工作正常。
如果您需要特定的结果,请询问,我会帮助您。

尝试在任何Python调试器中运行代码,您将立即看到所有结果。 代码工作正常。 如果您需要特定的结果,请询问,我会帮助您。

注意:有一些方法可以解决这个问题(涉及将迭代器存储到循环外的变量,并手动将其推进,以便
for
处理的迭代器本身会被修改,但是当您处于如此复杂的情况下,通常最好只使用
while
模拟一个C风格的
for
循环。注意:有一些方法可以解决这个问题(涉及将迭代器存储到循环外的变量,并手动将其推进,以便
for
处理的迭代器本身会被修改,但当您处于如此复杂的情况下,通常最好只使用
while
模拟C风格
for
循环。
A = [0,0,-1,0]
for i in range(len(A)):
    if(A[i]<0):
        break
    print(i, A[i])