我正在寻找这个循环的更优雅的解决方案。我的deques是动态创建的,可能会有所不同。在下面的例子中,列表只有两个项目长,可能长达3个项目。在我的应用程序中,列表最多可以有30个项目。因此,我希望避免编写大量的if语句,并且一旦deque为空就让代码停止执行。Python while while循环popleft() - 错误:空的双端队列
from collections import deque
my_list = [ 1,2 ]
my_deque = deque (my_list)
while my_deque:
alpha = my_deque.popleft()
beta = my_deque.popleft()
gamma = my_deque.popleft()
上面的代码执行所有三个命令和上伽玛命令返回一个“IndexError:从空双端队列弹出”。我明白为什么会出现这个错误,但想知道是否有一个技巧我缺少来评估一个list/deque在while循环中间是否为空(或另一种创造性的方式来循环一个长列表) 。
感谢您的帮助。
这工作。伽马实际上是字典中的关键。我认为try/except使得try或try中的所有代码都必须执行。没有意识到在异常之前执行的任何东西仍然会被执行。谢谢! – ccdpowell 2013-03-01 08:19:28
@ccdpowell:但要小心,如果有可能其他部分的代码也可能会引发IndexError,try-except也可能会引发这种情况。除了在while循环内部放置这个try可能会更好,只能围绕你拥有mydeque.popleft()的部分,但这取决于你想要做什么。 – 2013-03-01 08:25:33