[英]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語句。
你為什么不問你想要完成什么?
其他人發布的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.