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循环中间的列表/双端队列是否为空(或另一种创造性的循环长列表的方式) 。
谢谢您的帮助。
您可以使用与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)
但是,如果alpha,beta并gamma构成一个工作单元,它可能是一个更好的主意,将它们组合成一个元组,而该入队。
您可以捕获 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 是否为空?