其他语言
for(i=0; i<10; i++){
if(...){
i = 4;
}
}
循环会上升, 但在python中,它不起作用
for i in range(1, 11):
if ...:
i = 4
那么我可以用'for'循环上去吗?
答案 0 :(得分:6)
一种可能性是您想要跳过项目。循环遍历索引的所有操作都很难看,但这是使用while循环执行此操作的方法。
i = 1
while i < 11:
if predicate(i):
i = 4
i += 1
最好循环遍历您想要使用的列表中的项目,只需跳过您不想处理的项目。
for item in some_list_of_items:
if not predicate(item):
continue
do_something_with_item(item)
或使用生成器表达式过滤项目
for item in (item for item in some_list_of_items if predicate(item)):
do_something_with_item(item)
答案 1 :(得分:5)
这里的问题是range(1, 11)
返回一个列表,for...in
遍历列表元素,因此将i
更改为其他内容无法按预期工作。使用while
循环可以解决您的问题。
答案 2 :(得分:4)
Python不允许您内联修改循环变量。如果您希望这样做,您应该执行以下操作
i = 0
while i < 10:
if i == 3:
i = 7
print(i)
i += 1
这应该会产生你想要的效果。
您还可以执行以下操作:
for i in range(10):
if 2 < i < 7:
continue
print(i)
两者都有相同的效果。
答案 3 :(得分:4)
请注意,这只是一个坏主意。在for循环中更改迭代变量?在我看来,这相当于一个goto语句。
为什么不问你想要完成什么?
其他人发布的while循环解决方案是正确的翻译,但这也不是一个好主意。
答案 4 :(得分:1)
对于这种情况,您可能希望在Python中使用 while循环而不是 for loop 。 例如:
i = 0
while i < 10:
if ...:
i = 4
答案 5 :(得分:1)
只是一些值得思考的东西。
for循环遍历可迭代。创建自己的迭代,你可以自己前进。
iterator = iter(range(11))
for i in iterator:
print 'for i = ', i
try:
print 'next()', iterator.next()
except StopIteration:
continue
>>> foo()
for i = 0
next() 1
for i = 2
next() 3
for i = 4
next() 5
for i = 6
next() 7
for i = 8
next() 9
for i = 10
next()
>>>
xrange()是range()的迭代版本 iterable = xrange(11)将表现为迭代器。
itertools提供了很好的功能,例如dropwhile http://docs.python.org/library/itertools.html#itertools.dropwhile
这可以为你继续你的迭代器。
from itertools import dropwhile
iterator = iter(range(11))
for i in iterator:
if i == 3:
i = dropwhile(lambda x: x<8, iterator).next()
print 'i = ', i
>>> foo()
i = 0
i = 1
i = 2
i = 8
i = 9
i = 10
>>>
dropwhile可以在循环外调用,以在迭代器上创建迭代器。 然后你可以简单地调用next()就可以了。由于for循环和dropwhile都在同一个迭代器上调用next(),因此你可以控制它。
您还可以实现自己的迭代器,它使用send()来操作迭代器。
http://onlamp.com/pub/a/python/2006/10/26/python-25.html?page=2