"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo determinar si un generador está vacío en Python

Cómo determinar si un generador está vacío en Python

Publicado el 2024-11-16
Navegar:417

How to Determine If a Generator is Empty in Python

Determinación del vacío de un generador

En Python, los generadores son una herramienta poderosa para la evaluación diferida y la iteración sobre grandes conjuntos de datos. Sin embargo, determinar si un generador está vacío presenta un desafío único debido a su naturaleza dinámica. A diferencia de las listas o tuplas, los generadores no tienen un atributo de tamaño y simplemente iterar sobre ellos daría como resultado una excepción StopIteration.

Peek vs. HasNext

Algunos pueden sugerir usando la función peek() para verificar si un generador tiene elementos. Si bien peek() le permite recuperar el primer elemento de un generador sin consumirlo, no proporciona una forma de determinar si el generador está vacío. Esto se debe a que peek() genera una excepción StopIteration cuando el generador está vacío, lo cual es indistinguible de la excepción que se generaría al intentar iterar sobre un generador vacío.

De manera similar, la función hasNext(), comúnmente que se encuentra en Java, no está disponible en los generadores de Python.

Comprobación del vacío desde el principio

Para determinar si un generador está vacío desde el principio, puede utilizar un función personalizada como la proporcionada en la respuesta:

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

Esta función recupera el primer elemento del generador y devuelve Ninguno si el generador está vacío. También preserva el estado del generador devolviendo una versión modificada que incluye el primer elemento.

Uso

Para usar esta función, puedes llamarla con el generador como argumento:

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.

Esta verificación le permite determinar si el generador está vacío y manejar el caso vacío de manera adecuada, antes de iterar sobre él.

Declaración de liberación Este artículo se reimprime en: 1729390457 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3