Wie löse ich diesen Python-Loop am besten?
Hallo,
in folgendem Loop, bei dem my_list eine Liste aus Objekten ist
for x in my_list:
if x["key"] == 10:
print("Tue etwas")
weiß ich, dass sobald x["key"] einmal 10 ist, alle folgenden Einträge auch 10 sein werden. Wie kann ich mir am elegantesten die darauffolgenden Abfragen sparen?
Ich hätte schon daran gedacht, einen Iterator mit dem next() keyword bis zu x["key"] = 10 springen zu lassen und danach ohne weitere Abfrage über die restlichen Listenelemente zu iterieren... weiß jemand, wie man das in Python möglichst elegant macht?
Danke und VG,
Nico
2 Antworten
![](https://images.gutefrage.net/media/user/ralphdieter/1444750340_nmmslarge.jpg?v=1444750340000)
Dafür gibt es itertools:
from itertools import dropwhile
for x in dropwhile(lambda k: k["key"]!=10, my_list):
print("Tue etwas mit", x)
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
So...?
for x in my_list:
if x["key"] == 10:
break
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Dann würde das aber nur mit dem einen passieren. Alle Elemente ab x["key"] == 10 müssen "weiterverarbeitet" werden. Wenn ich beim ersten schon ein break setze, passiert das ja nicht
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Dann verstehe ich wohl noch nicht ganz was dein Programm machen soll...
Was soll denn z.B. mit allen Listenelementen bei folgender List gemacht werden?
list = [o1,o2,o3,o4,x5,x6,x7]
#Alle die mit x beginnen haben an der Stelle "key" 10 stehen
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Die Lösung von ralphdieter funktioniert, da wird deutlicher, was ich gemeint habe - mit den Objekten x5, x6, x7 werden weitere Abfragen (mit anderen Keys) gemacht und je nach dem verschiedenes ausgeführt. Ich wollte mir aber die redundante Abfrage für x6 und x7 sparen, ob x["key"] == 10 ist
Ich muss mit den Listenelementen dann noch was machen (was ich hier mit "print('Tue etwas')" abgekürzt hatte