Python while循环popleft()-错误:空双端队列

ccd*_*ell 1 python indexing list while-loop deque

我正在寻找对此循环更优雅的解决方案。我的双端队列是动态创建的,并且长度可以变化。在下面的示例中,列表只有两个项目,可能最多三个项目。在我的应用程序中,列表最多可以包含30个项目。因此,我想避免编写大量的if语句,并在双端队列为空后停止执行代码。

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()
Run Code Online (Sandbox Code Playgroud)

上面的代码执行所有三个命令,并且在gamma命令上返回“ IndexError:从空双端队列弹出”。我了解为什么会发生此错误,但是想知道是否缺少一种技巧来评估while循环中间的列表/双端队列是否为空(或另一种创造性的循环长列表的方式) 。

谢谢您的帮助。

NPE*_*NPE 5

您可以使用与while循环中相同的方式进行检查:

while my_deque:
    alpha = my_deque.popleft()
    beta = my_deque.popleft() if my_deque else None
    gamma = my_deque.popleft() if my_deque else None
Run Code Online (Sandbox Code Playgroud)

但是,如果alphabetagamma构成一个工作单元,它可能是一个更好的主意,将它们组合成一个元组,而该入队。


Lie*_*yan 5

您可以捕获 IndexError:

try:
    while mydeque:
        alpha = mydeque.popleft()
        beta = mydeque.popleft()
        gamma = mydeque.popleft()
except IndexError:
    # handle empty mydeque
Run Code Online (Sandbox Code Playgroud)

你想做什么?为什么要检查 mydeque 是否为空?