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(), чтобы пройти по нескольким последовательностям и создать кортежи из элементов с одинаковыми смещениями. Создадим два кортежа из соответствующих друг другу английских и французских слов:
>>> english = 'Monday', 'Tuesday', 'Wednesday'
>>> french = 'Lundi', 'Mardi', 'Mercredi'
Теперь используем функцию zip(), чтобы объединить эти кортежи в пару. Значение, возвращаемое функцией zip(), само по себе не является списком или кортежем, но его можно преобразовать в любую из этих последовательностей:
>>> list(zip(english, french))
[('Monday', 'Lundi'), ('Tuesday', 'Mardi'), ('Wednesday', 'Mercredi')]
Передайте результат работы функции zip() непосредственно функции dict() — и у нас готов небольшой англо-французский словарь!
>>> dict(zip(english, french))
{'Monday': 'Lundi', 'Tuesday': 'Mardi', 'Wednesday': 'Mercredi'}
Генерирование числовых последовательностей с помощью функции range()
Функция range() возвращает поток чисел в заданном диапазоне без необходимости создавать и сохранять крупную структуру данных вроде списка или кортежа. Это позволяет вам создавать большие диапазоны, не использовав всю память компьютера и не обрушив программу.
Вы можете применять функцию range() аналогично slice(): range(start, stop, step). Если опустите значение start, диапазон начнется с 0. Необходимым является лишь значение stop: как и в случае со slice(), оно определяет последнее значение, которое будет создано прямо перед остановкой функции. Значение по умолчанию step равно 1, но вы можете изменить его на -1.
Как и zip(), функция range() возвращает
>>> for x in range(0,3):
…·····print(x)
…
0
1
2
>>> list(range(0, 3))
[0, 1, 2]
Вот так можно создать диапазон от 2 до 0:
>>> for x in range(2, -1, -1):
…·····print(x)
…
2
1
0
>>> list(range(2, -1, -1))
[2, 1, 0]
В следующем фрагменте кода используется шаг 2, чтобы получить все четные числа от 0 до 10:
>>> list(range(0, 11, 2))
[0, 2, 4, 6, 8, 10]
Прочие итераторы
В главе 8 рассматривается итерирование по файлам. В главе 6 вы сможете увидеть, как использовать итерирование для объектов, которые сами определили.
Включения
Включение списков
Вы можете создать список целых чисел от 1 до 5, добавляя их туда по одному за раз, например, так:
>>> number_list = []
>>> number_list.append(1)
>>> number_list.append(2)
>>> number_list.append(3)
>>> number_list.append(4)
>>> number_list.append(5)
>>> number_list
[1, 2, 3, 4, 5]
Или же вы могли бы использовать итератор и функцию range():
>>> number_list = []
>>> for number in range(1, 6):
…·····number_list.append(number)
…
>>> number_list
[1, 2, 3, 4, 5]
Или же преобразовать в список сам результат работы функции range():
>>> number_list = list(range(1, 6))
>>> number_list
[1, 2, 3, 4, 5]