Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 80

>>> for cheese in cheeses:

... 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'