tg-me.com/BookPython/3464
Last Update:
Функция itertools.chain
позволяет объединить несколько итерируемых объектов, чтобы работать с ними, как с единым целым:
from itertools import chain
print(list(chain(['a', 'b'], range(3), set('xyz'))))
# Вывод: ['a', 'b', 0, 1, 2, 'x', 'z', 'y']
Иногда нужно проверить, пуст ли генератор (точнее, исчерпан ли он). Для этого можно попытаться получить следующий элемент с помощью
next()
. Если элемент есть, его нужно вернуть обратно в генератор, но сделать это напрямую невозможно. Однако можно «приклеить» его обратно с помощью chain
:
from itertools import chain
def sum_of_odd(gen):
try:
first = next(gen) # Пытаемся получить первый элемент
except StopIteration:
raise ValueError('Empty generator') # Если генератор пуст, выбрасываем исключение
# Используем chain для возврата первого элемента и объединения с остальными
return sum(
x for x in chain([first], gen)
if x % 2 == 1 # Суммируем только нечетные числа
)
Пример использования:
print(sum_of_odd(x for x in range(1, 6))) # Вывод: 9 (1 + 3 + 5)
print(sum_of_odd(x for x in range(2, 3))) # Вывод: 0 (нет нечетных чисел)
print(sum_of_odd(x for x in range(2, 2))) # ValueError: Empty generator
👉@BookPython
BY Библиотека Python разработчика | Книги по питону
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/BookPython/3464