Ich habe einen Iterator it
, von dem ich annehme, dass er bereits sortiert ist, aber ich möchte eine Ausnahme auslösen, wenn dies nicht der Fall ist.Überprüfen, ob der Iterator sortiert ist
Daten vom Iterator sind nicht im Speicher, daher möchte ich sorted()
nicht verwenden, da AFAIK den gesamten Iterator in eine Liste stellt.
Die Lösung, die ich jetzt bin mit ist der Iterator in einer Generatorfunktion so wickeln:
def checkSorted(it):
prev_v = it.next()
yield prev_v
for v in it:
if v >= prev_v:
yield v
prev_v = v
else:
raise ValueError("Iterator is not sorted")
Damit ich es wie folgt verwenden:
myconsumer(checkSorted(it))
Kennt jemand, wenn Es gibt bessere Lösungen?
Ich weiß, dass meine Lösung funktioniert, aber es scheint ziemlich seltsam zu sein (zumindest für mich), ein Modul zu schreiben, um solch eine triviale Aufgabe zu erledigen. Ich bin auf der Suche nach einem einfachen Einzeiler oder builtin Lösung
Dies aktualisiert nie 'prev_v'; es funktioniert nicht für 'iter ([1, 3, 2])'. – user2357112
Ehrlich gesagt, das scheint gut genug zu sein. Es hat ordentliche Leistung und tut, was Sie brauchen (wenn Sie 'prev_v' aktualisieren). Warum brauchst du einen One-Liner? – nneonneo
Verpasste eine Zeile! Vielen Dank. – Zac