【问题标题】:This python for loop and if statement are acting strange这个 python for 循环和 if 语句表现得很奇怪
【发布时间】:2016-11-25 10:03:29
【问题描述】:

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

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);
    }
}

什么是原因或我在这里遗漏了什么?

【问题讨论】:

    标签: python python-3.x loops


    【解决方案1】:

    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
    

    【讨论】:

    • 非常感谢... :D
    【解决方案2】:

    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
    

    【讨论】:

    • 非常感谢... :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多