«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как определить, пуст ли генератор в Python

Как определить, пуст ли генератор в Python

Опубликовано 16 ноября 2024 г.
Просматривать:177

How to Determine If a Generator is Empty in Python

Определение пустоты генератора

В Python генераторы — это мощный инструмент для отложенных вычислений и перебора больших наборов данных. Однако определение того, пуст ли генератор, представляет собой уникальную задачу из-за его динамической природы. В отличие от списков или кортежей, генераторы не имеют атрибута размера, и простая итерация по ним приведет к исключению StopIteration.

Peek vs. HasNext

Некоторые могут предложить используя функцию peek(), чтобы проверить, есть ли в генераторе элементы. Хотя функция peek() позволяет получить первый элемент генератора, не потребляя его, она не позволяет определить, пуст ли генератор. Это связано с тем, что peek() вызывает исключение StopIteration, когда генератор пуст, что неотличимо от исключения, которое может быть вызвано при попытке перебрать пустой генератор.

Аналогично, функция hasNext() обычно найден в Java, недоступен в генераторах Python.

Проверка пустоты из Start

Чтобы определить, пуст ли генератор с самого начала, вы можете использовать пользовательскую функцию, подобную той, что указана в ответе:

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

Эта функция извлекает первый элемент генератора, возвращая None, если генератор пуст. Он также сохраняет состояние генератора, возвращая измененную версию, включающую первый элемент.

Использование

Чтобы использовать эту функцию, вы можете вызвать ее с генератором в качестве аргумент:

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.

Эта проверка позволяет определить, пуст ли генератор, и соответствующим образом обработать пустой случай перед его итерацией.

Заявление о выпуске Эта статья перепечатана по адресу: 1729390457. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3