我只想使用基本的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。如果我错了,请纠正我。
答案 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
的事实,依此类推。这就是为什么它没有像你期望的那样工作的答案。请参阅其他答案,了解如何修复它......