„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So ermitteln Sie in Python, ob ein Generator leer ist

So ermitteln Sie in Python, ob ein Generator leer ist

Veröffentlicht am 16.11.2024
Durchsuche:845

How to Determine If a Generator is Empty in Python

Bestimmen der Leerheit eines Generators

In Python sind Generatoren ein leistungsstarkes Werkzeug für die verzögerte Auswertung und Iteration über große Datensätze. Allerdings stellt die Feststellung, ob ein Generator leer ist, aufgrund seiner dynamischen Natur eine besondere Herausforderung dar. Im Gegensatz zu Listen oder Tupeln haben Generatoren kein Größenattribut, und eine einfache Iteration über sie würde zu einer StopIteration-Ausnahme führen.

Peek vs. HasNext

Einige schlagen vielleicht vor Verwenden der Funktion peek(), um zu überprüfen, ob ein Generator Elemente enthält. Mit peek() können Sie zwar das erste Element eines Generators abrufen, ohne es zu verbrauchen, es bietet jedoch keine Möglichkeit festzustellen, ob der Generator leer ist. Dies liegt daran, dass peek() eine StopIteration-Ausnahme auslöst, wenn der Generator leer ist, die nicht von der Ausnahme zu unterscheiden ist, die ausgelöst würde, wenn versucht würde, über einen leeren Generator zu iterieren.

Ähnlich ist die Funktion hasNext() im Allgemeinen in Java gefunden, ist in Python-Generatoren nicht verfügbar.

Von Anfang an auf Leere prüfen

Um festzustellen, ob ein Generator von Anfang an leer ist, können Sie a verwenden Benutzerdefinierte Funktion wie die in der Antwort bereitgestellte:

def peek(iterable):
    try:
        first = next(iterable)
    except StopIteration:
        return None
    return first, itertools.chain([first], iterable)

Diese Funktion ruft das erste Element des Generators ab und gibt None zurück, wenn der Generator leer ist. Außerdem bleibt der Status des Generators erhalten, indem eine geänderte Version zurückgegeben wird, die das erste Element enthält.

Verwendung

Um diese Funktion zu verwenden, können Sie sie mit dem Generator als aufrufen Argument:

res = peek(mysequence)
if res is None:
    # sequence is empty.  Do stuff.
else:
    first, mysequence = res
    # Do something with first, maybe?
    # Then iterate over the sequence:
    for element in mysequence:
        # etc.

Mit dieser Prüfung können Sie feststellen, ob der Generator leer ist, und den leeren Fall entsprechend behandeln, bevor Sie darüber iterieren.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729390457 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3