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

2

Структуры данных Python

Структуры данных организуют и хранят информацию, упрощая к ней доступ. В Python встроены четыре структуры данных: списки, кортежи, словари и множества.

С этими структурами легко работать, при этом их можно использовать для выполнения сложных операций с данными,

что делает Python одним из самых популярных языков для анализа данных.

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

Списки

Список Python — это упорядоченная коллекция объектов. Элементы в списке разделяются запятыми, а сам список заключается в квадратные скобки:

[2,4,7]

['Bob', 'John', 'Will']

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

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

Списки содержат последовательность элементов, которые можно логически сгруппировать по общему признаку. Эта структура данных, как правило, содержит элементы одной категории (то есть однородные данные, такие как имена людей, названия статей или номера участников). Очень важно понимать эту особенность, выбирая подходящий инструмент для выполнения поставленной задачи. Если вам нужна структура, содержащая объекты с разными свойствами, используйте кортеж или словарь.

ПРИМЕЧАНИЕ

Хотя списки обычно считаются однородными, Python допускает наличие в них элементов разных типов. Этот список, например, включает как строки, так и целые числа:

['Ford', 'Mustang', 1964]

Создание списка

Чтобы создать простой список, поместите последовательность элементов внутрь квадратных скобок и присвойте этой последовательности имя:

regions = ['Asia', 'America', 'Europe']

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

regions = []

Теперь можно добавлять, удалять и сортировать элементы в созданном списке. Для этих (и некоторых других) целей в Python используются методы списков.

Использование общих методов списков

Методы списков — это функции, которые реализуют определенное поведение внутри списка. В этом разделе мы рассмотрим некоторые общие методы, включая

Списки      39

append(), index(), insert() и count(). Начнем практику с создания пустого списка. Попробуем создать список домашних обязанностей: шаг за шагом мы будем наполнять список делами и упорядочивать его:

my_list = []

append(), пожалуй, самый популярный метод списков. Он добавляет элемент в конец последовательности. Можно использовать append() для добавления обязанностей по дому в список:

my_list.append('Pay bills') my_list.append('Tidy up') my_list.append('Walk the dog') my_list.append('Cook dinner')

Теперь список содержит четыре элемента в том порядке, в каком они были добавлены:

['Pay bills', 'Tidy up', 'Walk the dog', 'Cook dinner']

Каждый элемент списка имеет числовой ключ, известный как индекс. Он позволяет сохранять элементы списка в определенном порядке. В Python используется нулевая индексация, то есть начальному элементу последовательности присваивается индекс 0.

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

print(my_list[0])

Функция print() выведет:

Pay bills

Индексы можно использовать не только для доступа к нужному элементу, но и для вставки нового элемента в заданное место. Скажем, необходимо добавить в список новую обязанность между выгулом собаки (walk the dog) и приготовлением ужина (cook dinner). Для этого сначала используем метод index(), чтобы

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

определить индекс элемента, перед которым нужно вставить новый. Сохраним его в переменной i:

i = my_list.index('Cook dinner')

Это значение будет индексом нового элемента. Добавим этот элемент с помощью метода insert():

my_list.insert(i, 'Go to the pharmacy')

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

['Pay bills', 'Tidy up', 'Walk the dog', 'Go to the pharmacy', 'Cook dinner']

Поскольку списки допускают повтор элементов, может понадобиться проверка того, сколько раз встречается тот или иной элемент. Это можно сделать с помощью метода count(), как в следующем примере:

print(my_list.count('Tidy up'))

Функция print() выявляет в списке только один экземпляр 'Tidy up'(делать уборку). Хотя, возможно, стоило бы почаще включать этот пункт в список дел!

ПРИМЕЧАНИЕ

Список всех методов списка можно найти в документации Python1.

Использование срезов

Получить доступ к диапазону элементов последовательности, например списка, можно с помощью нотации среза. Чтобы получить фрагмент списка, укажите индекс первого элемента фрагмента и индекс последнего элемента фрагмента плюс1. Разделите индексы двоеточием и заключите в квадратные скобки. Например, вывести на экран первые три пункта из списка дел можно следующим образом:

print(my_list[0:3])

1 https://docs.python.org/3/tutorial/datastructures.html

Списки      41

Результатом будет список элементов с индексами от 0 до 2:

['Pay bills', 'Tidy up', 'Walk the dog']

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

print(my_list[:3])

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

print(my_list[3:])

В результате получим два последних пункта списка дел:

['Go to the pharmacy', 'Cook dinner']

Наконец, вы можете опустить оба индекса, и тогда получите копию всего списка:

print(my_list[:])

Результат:

['Pay bills', 'Tidy up', 'Walk the dog', 'Go to the pharmacy', 'Cook dinner']

Нотация срезов не ограничивается извлечением подпоследовательности элементов списка. Ее также можно использовать вместо методов append() и insert() для заполнения списка. Так, например, можно добавить два пункта в конец списка:

my_list[len(my_list):] = ['Mow the lawn', 'Water plants']

Функция len() возвращает количество элементов в списке. Это же значение является первым индексом, выходящим за пределы списка. Можно смело добавлять­ новые элементы, начиная с этого индекса. Теперь список выглядит так:

['Pay bills', 'Tidy up', 'Walk the dog', 'Go to the pharmacy', 'Cook dinner', 'Mow the lawn', 'Water plants']