while
只要表達式爲true,循環語句就會被執行。while語句和表達式
第10次後,pop()拋出IndexError,因爲列表中有10個元素。但是,下面的代碼執行正常,沒有任何錯誤。爲什麼這樣?
a = [x*x for x in range(10)]
while a.pop():
print("elements in the list")
這可能是一個非常基本的問題,但我正在努力使用Python。
while
只要表達式爲true,循環語句就會被執行。while語句和表達式
第10次後,pop()拋出IndexError,因爲列表中有10個元素。但是,下面的代碼執行正常,沒有任何錯誤。爲什麼這樣?
a = [x*x for x in range(10)]
while a.pop():
print("elements in the list")
這可能是一個非常基本的問題,但我正在努力使用Python。
第10次後,彈出()拋出一個IndexError回來,因爲有10種元素在列表中。
否,代碼永遠不會嘗試在10日之後做任何pop
S,因爲10日pop
回報0
。 0
在布爾上下文中被認爲是false,所以循環終止於該點。
這是零!我認爲這是'while循環'用於處理異常的某種魔術。 – Abdou
這很快:)我改變了範圍(2,10),正如你所說,我確實得到了IndexError。看起來'for'處理StopIteration,'while'不處理。 –
目前尚不清楚你的問題是什麼。如果我執行你的代碼,它確實(我認爲)你所期望的。這是可能的0
導致出現意外的行爲:
>>> a = [x*x for x in range(10)]
>>> while a.pop():
... print a
...
[0, 1, 4, 9, 16, 25, 36, 49, 64]
[0, 1, 4, 9, 16, 25, 36, 49]
[0, 1, 4, 9, 16, 25, 36]
[0, 1, 4, 9, 16, 25]
[0, 1, 4, 9, 16]
[0, 1, 4, 9]
[0, 1, 4]
[0, 1]
[0]
更Python的測試列表本身只而不是.pop()
的結果,因爲這將終止任何falsy項目的循環:
>>> li=[1,2,3,False,4,5]
>>> while li.pop():
... print li
...
[1, 2, 3, False, 4]
[1, 2, 3, False]
您可以看到while
循環在pop中遇到False
時終止。
這將是更典型的做:
>>> li=[1,2,3,False,4,5]
>>> while li:
... e=li.pop()
... print e, li
...
5 [1, 2, 3, False, 4]
4 [1, 2, 3, False]
False [1, 2, 3]
3 [1, 2]
2 [1]
1 []
當列表變爲假終止。
更妙的是(在Python)使用for
循環是無損的列表:
>>> li=[1,2,3,False,4,5]
>>> for e in li:
... print e, li
...
1 [1, 2, 3, False, 4, 5]
2 [1, 2, 3, False, 4, 5]
3 [1, 2, 3, False, 4, 5]
False [1, 2, 3, False, 4, 5]
4 [1, 2, 3, False, 4, 5]
5 [1, 2, 3, False, 4, 5]
它按照您對我的期望工作。 – dawg
我不知道這是肯定的,但也許while循環將異常視爲錯誤?我也想知道。 – Abdou
@dawg我正在使用anaconda/3.5.2/pycharm。我試了一遍,它沒有任何錯誤的工作.. –