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。我试了一遍,它没有任何错误的工作.. –