"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como determinar se um gerador está vazio em Python

Como determinar se um gerador está vazio em Python

Publicado em 2024-11-16
Navegar:677

How to Determine If a Generator is Empty in Python

Determinando o vazio de um gerador

Em Python, os geradores são uma ferramenta poderosa para avaliação preguiçosa e iteração em grandes conjuntos de dados. Contudo, determinar se um gerador está vazio apresenta um desafio único devido à sua natureza dinâmica. Ao contrário das listas ou tuplas, os geradores não têm um atributo de tamanho e simplesmente iterá-los resultaria em uma exceção StopIteration.

Peek vs. HasNext

Alguns podem sugerir usando a função peek() para verificar se um gerador possui itens. Embora peek() permita recuperar o primeiro item de um gerador sem consumi-lo, ele não fornece uma maneira de determinar se o gerador está vazio. Isso ocorre porque peek() gera uma exceção StopIteration quando o gerador está vazio, o que é indistinguível da exceção que seria gerada ao tentar iterar sobre um gerador vazio.

Da mesma forma, a função hasNext(), comumente encontrado em Java, não está disponível em geradores Python.

Verificando o vazio desde o início

Para determinar se um gerador está vazio desde o início, você pode usar um função personalizada como a fornecida na resposta:

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

Esta função recupera o primeiro elemento do gerador, retornando None se o gerador estiver vazio. Ele também preserva o estado do gerador retornando uma versão modificada que inclui o primeiro elemento.

Uso

Para usar esta função, você pode chamá-la com o gerador como um 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 verificação permite determinar se o gerador está vazio e tratar o caso vazio adequadamente, antes de iterá-lo.

Declaração de lançamento Este artigo foi reimpresso em: 1729390457 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3