无法使用for循环跳过数字

时间:2017-08-28 07:17:21

标签: python for-loop iteration

我只想使用基本的python for loop打印一些数字:

for i in range(10):
    i = i+1
    print(i)

预期输出:

1
3
5
7
9

实际输出:

1
2
3
4
5
6
7
8
9
10

为什么变量'i'在i = i+1时跳过一步。 我假设i's是不同的?因为我尝试使用print(id(i))打印id。如果我错了,请纠正我。

5 个答案:

答案 0 :(得分:4)

这里需要注意的是,更改i的值不会影响迭代次数。您当前的代码从0到9步进,将1递增到当前值。它跳过这些迭代。 i只是for循环分配的循环变量,它不以任何方式控制迭代。

使用range功能的step参数代替:

In [665]: for i in range(1, 10, 2): # start, stop, step
     ...:     print(i)
     ...: 
1
3
5
7
9 

默认情况下,range一次只执行一个步骤,因此您最终会逐步完成要跳过的迭代。

答案 1 :(得分:2)

>>> p = range(1,10,2)
>>> p
[1, 3, 5, 7, 9]

>>> def test(last,step):
...     for item in range(1,last,step)
...         print item
>>> test(10,2)
1 
3
5
7
9
>>> 
>>> test(15,2)
1 
3
5 
7
9
11
13

答案 2 :(得分:1)

你可以尝试两种方法,这是你的方式,

>>> for i in range(10):
...     if i%2!=0:
...       print i
... 
1
3
5
7
9
>>> 

接下来是,正如@colspeed建议for i in range(1,10,2)

答案 3 :(得分:1)

Python for循环并不关心在循环期间对其临时变量所做的任何编辑。当它到达结尾时,它会勾选您将其提供给下一个项目的任何迭代器。在你的情况下,我不是你给它的范围的索引,它是循环内置指针的范围输出。 Cricket的答案是解决问题的最佳方法,但如果您想从内部改变循环,请使用外部变量:

numberlist = range(0,10)
i=0
while i < numberlist[-1]:
    i+=1 #+1 to skip
    print i
    i+=1 #+1 to turn while into for

答案 4 :(得分:0)

当您遍历列表[0,1,...9]range(10))时,在第一次迭代时,i设置为0,然后无论您使用{{1}做什么从那里开始,它不会改变i在下一次迭代时将被设置为i的事实,依此类推。这就是为什么它没有像你期望的那样工作的答案。请参阅其他答案,了解如何修复它......