190 Stimmen

Länge der Generatorleistung

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X