Comment déterminer si un générateur est vide en Python

Patricia Arquette
Libérer: 2024-10-20 10:40:02
original
906 Les gens l'ont consulté

How to Determine If a Generator is Empty in Python

Détermination du vide d'un générateur

En Python, les générateurs sont un outil puissant pour l'évaluation paresseuse et l'itération sur de grands ensembles de données. Cependant, déterminer si un générateur est vide présente un défi unique en raison de sa nature dynamique. Contrairement aux listes ou aux tuples, les générateurs n'ont pas d'attribut de taille, et le simple fait de les parcourir entraînerait une exception StopIteration.

Peek vs. HasNext

Certains peuvent suggérer en utilisant la fonction peek() pour vérifier si un générateur contient des éléments. Bien que peek() permette de récupérer le premier élément d'un générateur sans le consommer, il ne permet pas de déterminer si le générateur est vide. En effet, peek() déclenche une exception StopIteration lorsque le générateur est vide, ce qui est impossible à distinguer de l'exception qui serait levée lors d'une tentative d'itération sur un générateur vide.

De même, la fonction hasNext(), généralement trouvé en Java, n'est pas disponible dans les générateurs Python.

Vérification du vide dès le début

Pour déterminer si un générateur est vide dès le début, vous pouvez utiliser un fonction personnalisée comme celle fournie dans la réponse :

<code class="python">def peek(iterable):
    try:
        first = next(iterable)
    except StopIteration:
        return None
    return first, itertools.chain([first], iterable)</code>
Copier après la connexion

Cette fonction récupère le premier élément du générateur, renvoyant None si le générateur est vide. Il préserve également l'état du générateur en renvoyant une version modifiée qui inclut le premier élément.

Utilisation

Pour utiliser cette fonction, vous pouvez l'appeler avec le générateur comme argument :

<code class="python">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.</code>
Copier après la connexion

Cette vérification vous permet de déterminer si le générateur est vide et de gérer le cas vide de manière appropriée, avant de le parcourir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!