Python bietet eine schöne Methode, um die Länge einer eager iterable zu erhalten, len(x)
Das heißt. Aber ich konnte nichts Ähnliches für faule Iterabilien finden, die durch Generator-C comprehensions und Funktionen dargestellt werden. Natürlich ist es nicht schwer, etwas zu schreiben wie:
def iterlen(x):
n = 0
try:
while True:
next(x)
n += 1
except StopIteration: pass
return n
Aber ich werde das Gefühl nicht los, dass ich ein Fahrrad nachbaue.
(Während ich die Funktion tippte, kam mir ein Gedanke: Vielleicht gibt es eine solche Funktion wirklich nicht, weil sie ihr Argument "zerstört". Für meinen Fall ist das aber kein Thema).
P.S.: Was die ersten Antworten betrifft - ja, so etwas wie len(list(x))
würde auch funktionieren, aber das erhöht den Speicherverbrauch drastisch.
P.P.S.: erneut geprüft... Ignorieren Sie das P.S., anscheinend habe ich einen Fehler gemacht, als ich das versuchte, es funktioniert gut. Entschuldigung für den Ärger.