... print('This shop has some lovely', cheese)
... break
Выполняем итерации с помощью for
111
... else: # отсутствие прерывания означает, что сыра нет
... print('This is not much of a cheese shop, is it?')
...
This is not much of a cheese shop, is it?
Как и в цикле while, в цикле for использование блока else может показаться нелогичным.
Можно рассматривать цикл for как поиск чего-то, в таком случае else будет вызываться, если
вы ничего не нашли. Чтобы получить тот же эффект без блока else, используйте переменную,
которая будет показывать, нашелся ли искомый элемент в цикле for, как здесь:
>>> cheeses = []
>>> found_one = False
>>> for cheese in cheeses:
... found_one = True
... print('This shop has some lovely', cheese)
... break
. . .
>>> if not found_one:
... print('This is not much of a cheese shop, is it?')
. . .
This is not much of a cheese shop, is it?
Итерирование по нескольким последовательностям
с помощью функции zip()
Существует еще один полезный прием — параллельное итерирование по несколь-
ким последовательностям с помощью функции zip():
>>> days = ['Monday', 'Tuesday', 'Wednesday']
>>> fruits = ['banana', 'orange', 'peach']
>>> drinks = ['coffee', 'tea', 'beer']
>>> desserts = ['tiramisu', 'ice cream', 'pie', 'pudding']
>>> for day, fruit, drink, dessert in zip(days, fruits, drinks, desserts):
... print(day, ": drink", drink, "eat", fruit, "enjoy", dessert)
...
Monday : drink coffee — eat banana — enjoy tiramisu
Tuesday : drink tea — eat orange — enjoy ice cream
Wednesday : drink beer — eat peach — enjoy pie
Функция zip() прекращает свою работу, когда выполняется самая короткая
последовательность. Один из списков (desserts) оказался длиннее остальных, по-
этому никто не получит пудинг, пока мы не увеличим остальные списки.
В разделе «Словари» главы 3 показывается, как с помощью функции dict()
можно создавать словари из последовательностей, содержащих два элемента, вро-
де кортежей, списков или строк. Вы можете использовать функцию zip(), чтобы
112
Глава 4. Корочка Python: структуры кода
пройти по нескольким последовательностям и создать кортежи из элементов с оди-
наковыми смещениями. Создадим два кортежа из соответствующих друг другу
английских и французских слов:
>>> english = 'Monday', 'Tuesday', 'Wednesday'