while循环for循环不会改变python 3.x中for循环的i值

时间:2018-04-14 01:25:42

标签: 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

当我在python 3.x中执行此代码时,我的输出是

Output

0 0
1 0
1 0
3 0

我的问题是: while while循环首次退出时i的值2变为A[2] < 0

但之后,当它转到父for循环时,为什么i的值再次成为1

因为在第3行输出后,它再次打印1 0

4 个答案:

答案 0 :(得分:2)

Python for循环不像C for循环;迭代值在每个循环上替换,丢弃在循环内进行的任何更改。无论你对i循环内的for做什么,当for循环循环时,你从迭代器中提取下一个值,因此i将始终通过所有range中的值一次只有一个。

答案 1 :(得分:2)

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

你可以认为'for in in x'更像是:当x有更多的值时,将i设置为x的下一个值。

答案 2 :(得分:0)

while循环退出后会出现问题。我被设置为range(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

或使用break命令

A = [0,0,-1,0]
for i in range(len(A)):
    if(A[i]<0):
        break
    print(i, A[i])

答案 3 :(得分:-2)

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