Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Васильев Ю. - Python для data science (Библиотека программиста) - 2023.pdf
Скачиваний:
7
Добавлен:
07.04.2024
Размер:
7.21 Mб
Скачать

52      Глава 2. Структуры данных Python

ПРИМЕЧАНИЕ

Если вы хотите узнать больше об обработке естественного языка, рекомендую мою книгу «Natural Language Processing with Python and spaCy», также изданную No Starch Press1.

Кортежи

Так же как и список, кортеж представляет собой упорядоченную коллекцию объектов. Однако, в отличие от списков, кортеж неизменяем (immutable), то есть после создания его нельзя изменить. Элементы в кортеже разделяются запятыми и могут быть дополнительно заключены в круглые скобки:

('Ford', 'Mustang', 1964)

Обычно кортежи используются для хранения коллекций разнородных данных, то есть данных разных типов, например марки, модели и года выпуска автомобиля. Как показывает пример выше, кортежи особенно полезны при хранении свойств реального объекта.

Список кортежей

Достаточно часто структуры данных Python вложены друг в друга. Например, у вас может быть список, каждый элемент которого является кортежем, что позволяет присвоить элементу более одного признака. Допустим, нам необходимо задать время начала для каждой задачи в списке дел, который мы создали ранее в этой главе. Каждый элемент списка станет самостоятельной структурой данных, состоящей из двух элементов: описания задачи и запланированного времени начала ее выполнения.

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

[('8:00','Pay bills'), ('8:30','Tidy up'), ('9:30','Walk the dog'), ('10:00','Go to the pharmacy'), ('10:30','Cook dinner')]

Его можно создать из двух простых списков:

1Васильев Ю. «Обработка естественного языка. Python и spaCy на практике». СанктПетербург, издательство «Питер».

Кортежи      53

task_list = ['Pay bills', 'Tidy up', 'Walk the dog', 'Go to the pharmacy',

'Cook dinner']

tm_list = ['8:00', '8:30', '9:30', '10:00', '10:30']

Как видите, первый список — это исходный my_list, а второй — список, содержащий соответствующее время. Самый простой способ объединить их в список кортежей — использовать списковое включение, как показано ниже:

sched_list = [(tm, task) for tm, task in zip(tm_list, task_list)]

Внутри спискового включения используется функция zip(), которая проходит по двум простым спискам одновременно, объединяя соответствующее время и задачу в кортеж.

Как и в случае со списками, для доступа к элементу в кортеже необходимо указать индекс элемента, заключенный в квадратные скобки после имени кортежа. Однако обратите внимание, что кортежам, вложенным в список, не присваиваются имена. Чтобы получить доступ к элементу во вложенном кортеже, сначала нужно указать имя списка, затем индекс кортежа в списке и, наконец, индекс элемента в кортеже. Например, чтобы увидеть время выполнения второй задачи в списке дел, можно использовать следующий синтаксис:

print(sched_list[1][0])

Получим следующий вывод:

8:30

Неизменяемость

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

sched_list[1][0] = '9:00'

получим ошибку:

TypeError: 'tuple' object does not support item assignment