modifying iterator in for loop in python
本问题已经有最佳答案,请猛点这里访问。
@ Padraic Cunningham Let me know if you want me to delete the
question.
我是Python的新手。我想跳过一些基于某些条件的迭代器值。这在C语言中很容易,但在Python中,我遇到了困难。
所以请帮助我理解为什么这里的代码循环100次而不是10次。
1 2 3 | for i in range(100): print i i = i +10 |
编辑:我知道有一个选项可以更改for循环的步骤大小。但是我对动态地改变迭代器变量很感兴趣,就像我们在C语言中所做的那样。好吧,我明白了,因为在python中循环与在C语言中循环是不同的。简单的方法是使用while循环,我在我的代码中这样做,并且它工作了。谢谢大家!
for循环正在遍历不可迭代的
修改当前值不会影响ITerable中接下来出现的内容(实际上,您可以拥有任何ITerable;下一个值可能不是数字!).
选项1使用while循环:
1 2 3 | i = 0 while i < 100: i += 4 |
选项2,使用范围的内置步骤大小参数:
1 2 | for i in range(0,100,10): pass |
这个例子可以更清楚地说明为什么您的方法没有多大意义:
1 2 3 | for i in [1,2,3,4,5,'cat','fish']: i = i + i print i |
这是完全有效的python代码(定义了字符串加法);修改iterable需要一些非结构化的东西。
有关ITerables如何工作以及如何动态修改它们的详细信息,请参阅此处。
为此,请使用while循环。如果可以更改for循环中的迭代器迭代次数,则更改它不会更改数量。
1 2 3 4 | i=0 while i < 100: print i i = i +10 |
如果要修改迭代器,可以这样做:
1 2 3 4 | iterator= iter(range(100)) for i in iterator: print (i) for k in range(9): next(iterator) |
但没有实际的兴趣!
如果您尝试使用此代码,它应该可以工作。
1 2 | for i in range(100)[::10]: print i |
[::10]的工作方式类似于字符串切片。[第一个开始位置:停止位置:每个循环中要执行的步数]
我没有使用前两个值,所以它们被设置为默认的第一个位置和最后一个位置。我只是告诉它做10步。