簡體   English   中英

如何在for循環中使用for

[英]How to go up in a python loop with for

在其他語言中

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

循環會上升,但在python中,它不起作用

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

那么我可以用'for'循環嗎?

一種可能性是您想要跳過項目。 循環索引的所有操作都很難看,但這是一種使用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)

這里的問題是range(1, 11)返回一個列表,並且for...in列表元素的迭代,因此將i更改為其他內容不能按預期工作。 使用while循環可以解決您的問題。

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)

兩者都有相同的效果。

請注意,這只是個壞主意。 在for循環中更改迭代變量? 在我看來,這相當於一個goto語句。

你為什么不問你想要完成什么?

  • 你想過濾收藏嗎? 使用continue語句。
  • 或者你想再重復一些事情? 在里面創建一個重復循環。
  • 你想以不同的順序迭代嗎? 事先准備好訂單。

其他人發布的while循環解決方案是正確的翻譯,但這也不是一個好主意。

對於這種情況,您可能希望在Python中使用while循環而不是for循環 例如:

i = 0
while i < 10:
    if ...:
        i = 4

只是一些值得思考的東西。

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提供了很好的功能,如dropd 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM