我正在解决一个需要编写代码的问题,如下所示:
c = [0,0,1,0,0,1,0]
for i in range(7):
if(i<7-2 and c[i+2] == 0):
i += 1
print(i)
我期望这样的产出:
0
2
3
5
6
但我明白了:
0
2
3
3
5
5
6
但在C语言中使用相同的逻辑/代码,它工作得很好.
#include<stdio.h>
int main(){
int c[] = {0,0,1,0,0,1,0};
int i;
for(i=0;i<7;i++){
if(i<7-2 && c[i+2] == 0){
i++;
}
printf("%d\n",i);
}
}
我在这里失踪的原因是什么?
发布于 2016-11-25 10:07:44
python中的for i in range(7)
循环表现为for i in [0,1,2,3,4,5,6]
。i
是该列表中的值,而不是递增的索引。因此,您的i += 1
不做您认为它所做的事情。
您可以使用while循环来获得与c for循环相同的行为,但是可能有更多的pythonic方法来编写它。
i = 0
while i < 7:
if(i<7-2 and c[i+2] == 0):
i += 1
print(i)
i+=1
发布于 2016-11-25 10:09:20
for-in循环只是在其回合中将范围内的每个成员分配给i
,它不增加i
。因此,您对i
所做的任何修改都会在循环当前迭代结束时丢失。
您可以使用while
循环获得所需的行为,但是您必须自己增加i
:
i = 0
while i < 7:
if(i<7-2 and c[i+2] == 0):
i += 1
print(i)
i += 1
https://stackoverflow.com/questions/40802264
复制相似问题