Простой Python — страница 11 из 66

Напомню, список создается с помощью квадратных скобок ([]), кортеж — с помощью запятых, а словарь — с помощью фигурных скобок ({}). Во всех случаях вы получаете доступ к отдельному элементу с помощью квадратных скобок:

>>> marx_list = ['Groucho', 'Chico', 'Harpo']

>>> marx_tuple = 'Groucho', 'Chico', 'Harpo'

>>> marx_dict = {'Groucho': 'banjo', 'Chico': 'piano', 'Harpo': 'harp'}

>>> marx_list[2]

'Harpo'

>>> marx_tuple[2]

'Harpo'

>>> marx_dict['Harpo']

'harp'

Для списка и кортежа значение, находящееся в квадратных скобках, является целочисленным смещением. Для словаря же оно является ключом. Для всех троих результатом будет значение.

Создание крупных структур данных

Ранее мы работали с простыми булевыми значениями, числами и строками. Теперь же мы работаем со списками, кортежами, множествами и словарями. Вы можете объединить эти встроенные структуры данных в собственные структуры, более крупные и сложные. Начнем с трех разных списков:

>>> marxes = ['Groucho', 'Chico', 'Harpo']

>>> pythons = ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin']

>>> stooges = ['Moe', 'Curly', 'Larry']

Мы можем создать кортеж, который содержит в качестве элементов каждый из этих списков:

>>> tuple_of_lists = marxes, pythons, stooges

>>> tuple_of_lists

(['Groucho', 'Chico', 'Harpo'],

['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin'],

['Moe', 'Curly', 'Larry'])

Можем также создать список, который содержит три списка:

>>> list_of_lists = [marxes, pythons, stooges]

>>> list_of_lists

[['Groucho', 'Chico', 'Harpo'],

['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin'],

['Moe', 'Curly', 'Larry']]

Наконец, создадим словарь из списков. В этом примере используем название группы комиков в качестве ключа, а список ее членов — в качестве значения:

dict_of_lists = {'Marxes': marxes, 'Pythons': pythons, 'Stooges': stooges}

>> dict_of_lists

{'Stooges': ['Moe', 'Curly', 'Larry'],

'Marxes': ['Groucho', 'Chico', 'Harpo'],

'Pythons': ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin']}

Вас ограничивают только сами типы данных. Например, ключи словаря должны быть неизменяемыми, поэтому список, словарь или множество не могут быть ключом для другого словаря. Но кортеж может быть ключом. Например, вы можете создать алфавитный указатель достопримечательностей, основываясь на GPS-координатах (широте, долготе и высоте; обратитесь к разделу «Карты» приложения Б, где вы сможете найти еще несколько примеров работы с картами):

>>> houses = {

········(44.79, -93.14, 285): 'My House',

········(38.89, -77.03, 13): 'The White House'

········}

Упражнения

В этой главе вы познакомились с более сложными структурами данных: списками, кортежами, словарями и множествами. Используя их и типы данных, описанные в главе 2 (числа и строки), вы можете представить множество элементов реального мира.

1. Создайте список years_list, содержащий год, в который вы родились, и каждый последующий год вплоть до вашего пятого дня рождения. Например, если вы родились в 1980 году, список будет выглядеть так: years_list = [1980, 1981, 1982, 1983, 1984, 1985].

Если вам меньше пяти лет и вы уже читаете эту книгу, то я даже не знаю, что сказать.

2. В какой из годов, содержащихся в списке years_list, был ваш третий день рождения? Помните, в первый год вам было 0 лет.

3. В какой из годов, перечисленных в списке years_list, вам было больше всего лет?

4. Создайте список things, содержащий три элемента: "mozzarella", "cinderella", "salmonella".

5. Напишите с большой буквы тот элемент списка things, который относится к человеку, а затем выведите список. Изменился ли элемент списка?

6. Переведите сырный элемент списка things в верхний регистр целиком и выведите список.

7. Удалите болезнь из списка things, получите Нобелевскую премию и затем выведите список на экран.

8. Создайте список, который называется surprise и содержит элементы 'Groucho', 'Chico' и 'Harpo'.

9. Напишите последний элемент списка surprise со строчной буквы, затем обратите его и напишите с прописной буквы.

10. Создайте англо-французский словарь, который называется e2f, и выведите его на экран. Вот ваши первые слова: dog/chien, cat/chat и walrus/morse.

11. Используя словарь e2f, выведите французский вариант слова walrus.

12. Создайте французско-английский словарь f2e на основе словаря e2f. Используйте метод items.

13. Используя словарь f2e, выведите английский вариант слова chien.

14. Создайте и выведите на экран множество английских слов из ключей словаря e2f.

15. Создайте многоуровневый словарь life. Используйте следующие строки для ключей верхнего уровня: 'animals', 'plants' и 'other'. Сделайте так, чтобы ключ 'animals' ссылался на другой словарь, имеющий ключи 'cats', 'octopi' и 'emus'. Сделайте так, чтобы ключ 'cats' ссылался на список строк со значениями 'Henri', 'Grumpy' и 'Lucy'. Остальные ключи должны ссылаться на пустые словари.

16. Выведите на экран высокоуровневые ключи словаря life.

17. Выведите на экран ключи life['animals'].

18. Выведите значения life['animals']['cats'].

Глава 4. Корочка Python: структуры кода

В первых трех главах вы увидели множество примеров данных, но практически не работали с ними. В большинстве примеров использовался интерактивный интерпретатор, а сами они были довольно короткими. Теперь вы увидите, как структурировать код Python, а не только данные.

В большинстве языков программирования символы вроде фигурных скобок ({ и }) или ключевые слова вроде begin и end применяется для того, чтобы разбить код на разделы. В этих языках хорошим тоном является использование отбивки пробелами, чтобы сделать программу более удобочитаемой для себя и других. Существуют даже инструменты, которые помогут красиво выстроить ваш код.

Гвидо ван Россум при разработке Python решил, что выделения пробелами будет достаточно, чтобы задать структуру программы и избежать ввода всех этих скобок. Python отличается от других языков тем, что пробелы в нем используются для того, чтобы задать структуру программы. Этот аспект новички замечают одним из первых, и он может показаться странным для тех, кто уже работал с другими языками программирования. Однако по прошествии некоторого времени это начинает казаться естественным и вы перестаете это замечать. Вы даже привыкнете к тому, что делаете больше, набирая меньше текста.

Комментируем с помощью символа #

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

>>> # 60 с/мин * 60 мин/ч * 24 ч/день

>>> seconds_per_day = 86400

Или на той же строке, что и код, который нужно пояснить:

>>> seconds_per_day = 86400 # 60 sec/min * 60 min/hr * 24 hr/day

Символ # имеет много имен: хеш, шарп, фунт или устрашающее октоторп[3]. Как бы вы его ни назвали[4], его эффект действует только до конца строки, на которой он располагается.

Python не дает возможности написать многострочный комментарий. Вам нужно явно начинать каждую строку или раздел комментария с символа #:

>>> # Я могу сказать здесь все, даже если Python это не нравится,

… # поскольку я защищен крутым