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