首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个python循环和if语句很奇怪。

这个python循环和if语句很奇怪。
EN

Stack Overflow用户
提问于 2016-11-25 10:03:29
回答 2查看 158关注 0票数 2

我正在解决一个需要编写代码的问题,如下所示:

代码语言:javascript
运行
复制
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)

我期望这样的产出:

代码语言:javascript
运行
复制
0
2
3
5
6

但我明白了:

代码语言:javascript
运行
复制
0
2
3
3
5
5
6

但在C语言中使用相同的逻辑/代码,它工作得很好.

代码语言:javascript
运行
复制
#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);
    }
}

我在这里失踪的原因是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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方法来编写它。

代码语言:javascript
运行
复制
i = 0
while i < 7:
   if(i<7-2 and c[i+2] == 0):
        i += 1
   print(i)
   i+=1
票数 2
EN

Stack Overflow用户

发布于 2016-11-25 10:09:20

for-in循环只是在其回合中将范围内的每个成员分配给i,它不增加i。因此,您对i所做的任何修改都会在循环当前迭代结束时丢失。

您可以使用while循环获得所需的行为,但是您必须自己增加i

代码语言:javascript
运行
复制
i = 0
while i < 7:
    if(i<7-2 and c[i+2] == 0):
        i += 1
    print(i)
    i += 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40802264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档