簡體   English   中英

在循環內遞增 for 循環

[英]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.

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