在Python中更改for循环中的迭代变量

时间:2013-04-09 13:08:46

标签: python

我正在尝试做一些简单的事情,比如改变我迭代的变量(i),但我在Python和C中都有不同的行为。

在Python中,

for i in range(10):
    print i,
    if i == 2:
        i = 4;

我得到0 1 2 3 4 5 6 7 8 9,但在C:

中等效
int i;
for (i = 0; i < 10; i++) {
    printf("%d", i);
    if (i == 2)
        i = 4;
}

我得到01256789(请注意,数字3和4不会出现,如预期的那样)。

这里发生了什么?

6 个答案:

答案 0 :(得分:14)

你没有按照自己的想法行事 例如:

for i in range(10):
无论如何,

都会不断将i设置为范围0-10中的下一个元素。

如果你想在python中做同等的事情,你会这样做:

i = 0
while i < 10:
    print(i)
    if i == 2:
        i = 4
    else:      # these line are
        i += 1 # the correct way
    i += 1 # note that this is wrong if you want 1,2,4,5,6,7,8,9

如果您要将其转换为C,则必须记住i++循环中的for将始终添加到i

答案 1 :(得分:8)

函数range()创建一个列表。 例如,range(10)将创建以下列表:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

当您说for i in range(10)时,首先会生成所有列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],然后将i按顺序分配该列表中的所有值。

如果更改i的值并不重要,因为在下一次迭代中,它将被分配列表中的下一个元素。

另一方面,在C / C ++中,在每次迭代结束时,i的值递增,然后与最大允许值(在本例中为9)进行比较,如果它更大,则循环结束。

答案 2 :(得分:2)

当您致电range(10)时,您会创建一个可迭代的列表[0,1,2,3,4,5,6,7,8,9]

for循环只需在每个回合中从列表中选出一个数字,无论你是否更改了i的值。

答案 3 :(得分:1)

Python为您提供了range(10)中的元素,一个接一个。 C反复增加变量。

他们两个都不关心你对循环中的变量做了什么,但由于这两种语言结构做的事情略有不同,在某些情况下结果是不同的。

答案 4 :(得分:0)

这是因为在python中使用range()函数时。你的变量我将通过范围内的值。例如,

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

但是,您编写的C语言只是使用常规条件来更改i的值。没有涉及的功能。

答案 5 :(得分:0)

您无法使用范围功能执行此操作。 你必须通过使用while循环来做到这一点,因为for循环使用范围函数和范围函数变量将通过其内部方法增加,无论你在循环中指定什么,它将仅按范围列表递增。 我在范围内(10): ...打印我 ......如果我== 2: ... i = 4 ......别的: ...... i + = 1 ... 0 1 2 3 4 五 6 7 8 9

这里有一个有趣的例子......

表示范围(10)中的i: ...打印我 ... i = i + 10 ...打印我 ... 这将打印... 0 10 1 11 2 12 3 13 4 14 五 15 6 16 7 17 8 18 9 19