如何在for循环中使用for

时间:2010-11-27 06:12:51

标签: python

其他语言

for(i=0; i<10; i++){
    if(...){
        i = 4;
    }
}

循环会上升, 但在python中,它不起作用

for i in range(1, 11):
    if ...:
        i = 4

那么我可以用'for'循环上去吗?

6 个答案:

答案 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语句。

为什么不问你想要完成什么?

  • 您想过滤收藏吗?使用continue语句。
  • 或者你想重复一些事情吗?在里面创建一个重复循环。
  • 您想要以不同的顺序进行迭代吗?事先准备好订单。

其他人发布的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