簡體   English   中英

在`range(x)`循環中使用`for`

[英]Using `for` in `range(x)` loop


兩個代碼塊都不應該打印相似的結果嗎? 為什么每次到達內部for語句時都會重新評估內部循環內的范圍函數,而外部循環中的范圍函數僅被評估一次?

x = 4
for j in range(x)
   for i in range(x)
       print i
       x = 2

結果
0
1個
2
3
0
1個
0
1個
0
1個

我知道打印的前4個整數(0-3)是j在range(x)中的代碼的結果:代碼,但是為什么還要打印以下內容?
0
1個
0
1個
0
1個
編碼

x = 4
for j in range(x):
    print i
    x = 5

版畫
0
1個
2
3

IDLE中的附加信息Python 2.7

函數range(x)產生[0,1,2,3,4]的列表。 for循環中,您遍歷此列表。

您的代碼等效於:

for j in [0,1,2,3]:
    for i in [0,1,2,3]:
        print i
    for i in [0,1]:
        print i
    for i in [0,1]:
        print i
    for i in [0,1]:
        print i

我只能通過遍歷循環的迭代來進行解釋,所以這里是:

x = 4
for j in range(x)
   for i in range(x)
       print i
       x = 2

第一次通過。

x = 4
for j in [0, 1, 2, 3]
    for i in range [0, 1, 2, 3]
        print i
        x = 2

版畫

0
1
2
3

現在x設置為2,但是外部循環范圍已經執行,因此不重新評估。

現在的代碼變為:

for j in [0, 1, 2, 3]:
    for i in [0, 1]:
        print i
        x = 2

版畫

0
1

並且這將繼續兩次。

僅對一次range(x)進行一次評估,即,當循環開始時,這就是為什么在循環內修改x無效的原因。

但是,在第一個代碼時鍾中,您將內部的x更改為2,因此,下次執行內部循環時,范圍僅給出(0,1)。

編輯:您的第一段代碼等效於

x = 5
for i in range(x)
    print i
    x = 2

這是我的看法:

內循環針對外循環的每次迭代執行

x = 4
j = 0
for i in range (x):
    print(i)
    x = 2
j = 1
for i in range(x) # this x is no longer 4 but it is 2
    print(i)
    x = 2
j = 2
for i in range (x): # this x is, of course, 2
    print(i)
    x = 2
j = 3
for i in range (x): # this x is, of course, 2
    print(i)
    x = 2

j未打印,請在范圍(x)中為i插入“ print('xx',j,'oo')”

然后更改為“ print('xx',x,'oo')

或將“對於范圍(x)中的j:”更改為“對於范圍(225,200,-5)中的j:”,然后在“對於范圍(x)中的i:”前跟“打印(j)”

暫無
暫無

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

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