[英]Incrementing a for loop, inside the loop
是否可以在python 3的循環內增加for循環?
例如:
for i in range(0, len(foo_list)):
if foo_list[i] < bar
i += 4
如果條件成立,循環計數器i
將增加 4,否則它只會增加 1(或 for 循環的任何步長值)?
我知道 while 循環更適用於這樣的應用程序,但最好知道 for 循環中的這個(或類似的東西)是否可行。
謝謝!
您可以使用 while 循環並根據條件遞增i
:
while i < (len(foo_list)):
if foo_list[i] < bar: # if condition is True increment by 4
i += 4
else:
i += 1 # else just increment 1 by one and check next `foo_list[i]`
使用 for 循環, i
將始終返回范圍內的下一個值:
foo_list = [1,2,3,4,5,6]
bar = 6
for i in range(len(foo_list)):
print("range i ",i)
if foo_list[i] < bar:
i += 4
print("if i",i)
('range i ', 0)
('if i', 4)
('range i ', 1)
('if i', 5)
('range i ', 2)
('if i', 6)
('range i ', 3)
('if i', 7)
('range i ', 4)
('if i', 8)
('range i ', 5)
在您編寫的示例中, i
將在循環的每次新迭代中重置(這可能看起來有點違反直覺),如下所示:
foo_list = [1, 2, 3]
for i in range(len(foo_list)):
print('Before increment:', i)
i += 4
print('After increment', i)
>>>
Before increment: 0
After increment 4
Before increment: 1
After increment 5
Before increment: 2
After increment 6
continue
是跳到循環的下一個單次迭代的標准/安全方式,但是將continues
在一起比像其他人建議的那樣只使用while
循環要尷尬得多。
有點黑客...
>>> b = iter(range(10))
>>> for i in b:
... print(i)
... if i==5 : i = next(b)
...
0
1
2
3
4
5
7
8
9
>>>
while i < end:
# do stuff
# maybe i +=1
# or maybe i += 4
如果您嘗試過,我想您可以在 for 循環中執行此操作,但不建議這樣做。 python for 循環的重點是查看項目,而不是索引
可以通過使用生成器的send
方法的for
循環來實現這一點,如果向生成器發送新值,則可以修改計數器:
def jumpable_range(end):
counter = 0
while counter < end:
jump = yield counter
if jump is None:
counter += 1
else:
counter = jump
foo_list = [1, 2, 3, 4, 5, 6, 7, 8]
bar = 6
iterable = jumpable_range(len(foo_list))
for i in iterable:
if foo_list[i] < bar:
i = iterable.send(i + 4)
print(i)
這輸出:
4
5
6
7
演示: https : //repl.it/@blhsing/ImpossibleAcrobaticComputergraphics
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.