Python while-Schleife popleft() - FEHLER: Leere deque
Ich bin auf der Suche nach einer eleganten Lösung für diese Schleife. Meine deques werden dynamisch erstellt und können in der Länge variieren. Im Beispiel unten ist die Liste nur zwei Elemente, die lang und konnte bis zu 3 Elemente lang. In meiner Anwendung, die Listen können bis zu 30 Einträge lang. Ich möchte daher vermeiden, schreiben viele if-Anweisungen und den stop-code ausführen, sobald das deque leer ist.
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()
Den obigen code ausführt, alle drei Befehle und auf die gamma-Befehl gibt ein "IndexError: pop aus eine leere deque." Ich verstehe, warum dieser Fehler passiert ist, wollen aber wissen, ob es ist ein trick, den ich vermisse, um zu bewerten, ob eine Liste/deque leer ist oder nicht in der Mitte einer while-Schleife (oder eine andere kreative Art und Weise, um eine Schleife durch eine lange Liste).
Danke für die Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie fangen die IndexError:
Was wollen Sie tun? Warum wollen Sie, um zu überprüfen, dass die mydeque leer ist?
Können Sie in genau der gleichen Weise, wie Sie bereits in der
while
Schleife:Jedoch, wenn
alpha
,beta
undgamma
bilden eine Einheit funktionieren, könnte es eine bessere Idee, Sie zu kombinieren in einem Tupel, und enqueue, dass.popleft()
. Ich habe aktualisiert, der code, um hoffentlich deutlicher machen.Wenn Sie wissen, ob Voraus, wie viele Elemente, die Sie gehen zu knallen aus der Warteschlange, können Sie die Bedingung, die die Schleife dort zumindest, dass sich viele bereit:
Wenn Sie nicht wissen, wie viele Elemente, die angefordert werden können, Sie können ein "einfacher um Vergebung zu bitten als-Berechtigung" - Ansatz und die Schleife bedingungslos:
Wenn die pops geschehen, in weit voneinander entfernten teilen der Schleife code, den Sie verwenden konnten, separate try/except-Blöcke für jeden von Ihnen, anstatt einwickeln, das ganze in ein einziges.