如何在python循环中使用for

如何在python循环中使用for,python,Python,用其他语言 for(i=0; i<10; i++){ if(...){ i = 4; } } 所以我可以用“for”循环吗?一种可能是你想跳过项目。与索引上的循环有关的一切都是丑陋的,但这里有一种方法可以通过while循环来实现这一点 i = 1 while i < 11: if predicate(i): i = 4 i += 1 或者使用生成器表达式筛选项目 for item in (item for item

用其他语言

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

所以我可以用“for”循环吗?

一种可能是你想跳过项目。与索引上的循环有关的一切都是丑陋的,但这里有一种方法可以通过while循环来实现这一点

i = 1
while i < 11:
    if predicate(i):
        i = 4
    i += 1
或者使用生成器表达式筛选项目

for item in (item for item in some_list_of_items if predicate(item)):
    do_something_with_item(item)


对于这种情况,您可能希望在Python中使用while循环而不是For循环。 例如:

i = 0
while i < 10:
    if ...:
        i = 4
i=0
当我<10时:
如果…:
i=4

这里的问题是
range(1,11)
返回一个列表,并且
for…in
迭代列表元素,因此将
i
更改为其他内容无法按预期工作。使用
while
循环应该可以解决您的问题。

Python不允许您内联修改循环变量。如果您希望这样做,您应该执行以下操作

i = 0
while i < 10:
   if i == 3:
       i = 7
   print(i)
   i += 1
i=0
当我<10时:
如果i==3:
i=7
印刷品(一)
i+=1
这应该有你想要的效果

您还可以执行以下操作:

for i in range(10):
   if 2 < i < 7:
       continue
   print(i)
范围(10)内的i的
:
如果2

两者都有相同的效果。

请注意,这只是个坏主意。在for循环中更改迭代变量?在我看来,这相当于一个后进声明

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

  • 是否要筛选集合?使用continue语句
  • 或者你想重复一些事情更多次?在内部创建一个重复循环
  • 您希望以不同的顺序进行迭代吗?我们要事先准备好订单

其他人发布的while循环解决方案是正确的翻译,但这也不是一个好主意。

只是一些值得思考的东西

for循环在iterable上循环。创建你自己的iterable,让你自己向前迈进

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之类的功能

这可以为您继续使用迭代器

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
>>> 
从itertools导入dropwhile
迭代器=iter(范围(11))
对于迭代器中的i:
如果i==3:
i=dropwhile(lambda x:x>>foo()
i=0
i=1
i=2
i=8
i=9
i=10
>>> 
可以在循环外部调用dropwhile,在迭代器上创建迭代器。 因为for循环和dropwhile都在同一个迭代器上调用next(),所以您可以对它进行一些控制

您还可以实现自己的迭代器,该迭代器使用send()来操作迭代器


@mshsayem:似乎是个打字错误,我想我应该用while而不是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()
>>> 
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
>>>