簡體   English   中英

在python中與范圍一起使用時如何增加循環索引?

[英]How to increment for loop index when used with range in python?

我有一個for循環如下:

i=0 
while True:
    print("i initialized as", i)
    for i in range(0,3):
        print ("inside for",i)
        i = i + 1
    print("exit from for i value is",i)

現在在 while 無限循環內部有 for 並且每次 for "i" 迭代都從 "0" 開始,理想情況下 "i" 應該得到遞增的值並從 2 開始,輸出為:

 inside for 0
 inside for 1
 inside for 2

 second iteration:

 inside for 0
 inside for 1
 inside for 2
 .
 .

理想的輸出如下:

 inside for 0
 inside for 1
 inside for 2
 
 second iteration:
 inside for 3
 inside for 4
 inside for 5
 .
 .

所以重點是“i”值沒有保存,並且每次循環都從 0 開始,那么我怎樣才能讓“i”在進入 for 循環之前從最后一個遞增的值開始。

當您使用for i in ...時,您無法控制i 它設置為for循環在循環時決定的任何內容。

在這里,只是不要使用i作為循環索引,使用像_這樣的匿名變量來計數 3 次,將i保留為“全局”計數器:

i=0
while i<10:  # just to stop after a while for the demo
 print("i initialized as", i)
 for _ in range(0,3):
      print ("inside for",i)
      i = i + 1
 print("exit from for i value is",i)

輸出:

inside for 0
inside for 1
inside for 2
exit from for i value is 3
i initialized as 3
inside for 3
inside for 4
inside for 5
exit from for i value is 6
i initialized as 6
inside for 6
inside for 7
inside for 8
exit from for i value is 9
i initialized as 9
inside for 9
inside for 10
inside for 11
exit from for i value is 12

旁白: while true應該是while True 與 Java 和 C++ 不同,布爾值在 python 中大寫。

這里的問題是您正在嘗試修改for循環的循環變量。 Python 不會阻止您在循環中執行i = i + 1 ,但是一旦控制回到循環頂部, i就會重置為序列中的下一個值。 這只是 Python 中for循環的工作方式,如果您循環遍歷 list 或 tuple 而不是range ,也會發生這種情況。 例如,

for i in (2, 3, 5, 7, 11):
    print(i)
    i = 10 * i
    print(i)

輸出

2
20
3
30
5
50
7
70
11
110

不過,要獲得您想要的輸出很容易。 在下面的代碼中,我用一個小for循環替換了你的無限while循環。

i = 0 
for j in range(3):
    print("\ni initialized as", i)
    for i in range(i, i + 3):
        print ("inside for", i)
    i += 1

輸出

i initialized as 0
inside for 0
inside for 1
inside for 2

i initialized as 3
inside for 3
inside for 4
inside for 5

i initialized as 6
inside for 6
inside for 7
inside for 8

如果外循環不是無限的,你可以用一個循環和一個if測試來做這種事情。 它更緊湊,但速度稍慢,因為它必須在每次循環迭代時執行測試。

outer_loops = 4
inner_loops = 3
for i in range(outer_loops * inner_loops):
    if i % inner_loops == 0:
        print("\nIteration", i // inner_loops)
    print ("inside for", i)

輸出

Iteration 0
inside for 0
inside for 1
inside for 2

Iteration 1
inside for 3
inside for 4
inside for 5

Iteration 2
inside for 6
inside for 7
inside for 8

Iteration 3
inside for 9
inside for 10
inside for 11

不要在for循環中覆蓋變量i (我將其更改為_ ):

i=0 
while true:
 print("i initialized as", i)
 for _ in range(0,3):
      print ("inside for",i)
      i = i + 1
 print("exit from for i value is",i)

也許這會有所幫助:

i=0 
while true:
    print("i initialized as", i)
    for x in range(i+1, i+4):
       print ("inside for",i)
       i = i + 1
print("exit from for i value is",i)

暫無
暫無

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

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