我正在尋找這個循環的更優雅的解決方案。我的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