Введение в коллекции
Встроенные типы данных в Python позволяют эффективно работать с информацией различного формата. И если числовые и логические типы предназначены для хранения отдельных значений, то коллекции служат контейнерами для одновременного хранения множества элементов.
Коллекции в Python представлены такими типами данных, как уже хорошо знакомые нам строки, а также списки, кортежи, множества и словари.
Каждая встроенная коллекция обладает уникальным набором свойств, определяемых её упорядоченностью, изменяемостью и требованиями к уникальности элементов. Выбор подходящей коллекции зависит от конкретной задачи и требований к хранению и обработке данных.
|
Название |
Пример |
Упорядоченность |
Изменяемость |
Уникальность |
|---|---|---|---|---|
|
Строки |
|
✅ | ⛔ | ⛔ |
|
Списки |
|
✅ | ✅ | ⛔ |
|
Кортежи |
|
✅ | ⛔ | ⛔ |
|
Множества |
|
✅ | ✅ | ✅ |
| Словари | {"Россия": "Москва", "Китай": "Пекин"} |
✅ | ✅ |
Ключи – ✅ Значения – ⛔ |
Основные коллекции
Давайте кратко рассмотрим каждую из встроенных коллекций, представленных в Python.
1. Строки, которые мы уже неоднократно использовали, представляют собой упорядоченную последовательность символов, заключённую в двойные " или одинарные ' кавычки:
username = "Sauron999"
Строки неизменяемы, то есть мы не можем изменить отдельные символы в строке после её создания. Поэтому все операции над строками на самом деле создают новую строку.
2. Списки – наиболее гибкая и часто используемая коллекция, которая содержит упорядоченный набор элементов в квадратных скобках:
books = ["Хоббит, или Туда и обратно", "Две крепости", "Братство Кольца"]
Списки изменяемы, поэтому мы можем свободно добавлять, удалять и изменять их элементы.
3. Кортежи, как и списки, хранят элементы в определённом порядке, однако они неизменяемы и создаются с помощью круглых скобок:
hobbits = ("Фродо Бэггинс", "Бильбо Бэггинс")
После создания кортежа в него невозможно внести какие-либо изменения, что делает его полезным для хранения данных, которые не должны подвергнуться случайным изменениям, например, какие-то константы.
4. Множества в Python представляют собой неупорядоченную коллекцию уникальных элементов. Они во многом напоминают математические множества и определяются путем перечисления элементов в фигурных скобках:
regions = {"Хоббитон", "Тростниковая Топь", "Иглоушко", "Малоройка"}
Множества являются изменяемыми, что позволяет добавлять, изменять и удалять элементы.
5. Словари в Python очень похожи на словари в реальной жизни, и организуют данные в виде пар «ключ-значение», заключённых в фигурные скобках:
heroes = {"Арагорн": 2931, "Леголас": 3018, "Бард I": 2941}
Ключи словаря должны быть уникальными, в то время как значения могут повторяться. Словари изменяемы, что позволяет добавлять, удалять и изменять пары «ключ-значение». Исторически словари считались неупорядоченными коллекциями. Однако начиная с Python 3.7, словари гарантированно сохраняютпорядок вставки элементов.
Упорядоченность коллекций
Строки, списки, кортежи и словари обладают свойством упорядоченности, то есть порядок, в котором элементы были добавлены в коллекцию, сохраняется.
При этом в строках, списках и словарях каждый элемент имеет свой порядковый номер, называемый индексом, по которому можно получить этот элемент. Для этого следует указать индекс в квадратных скобках:
sport = ["Теннис", "Футбол", "Волейбол"]
print(sport[1])
# Вывод: Футбол
В программировании принято начинать считать с 0, поэтому первый элемент "Теннис" находится по индексу 0, второй элемент "Футбол" – по индексу 1 и так далее. Более подробно механизм индексов мы рассмотрим далее.

В Python, как и во многих других языках программирования, индексация начинается с 0, а не с 1, так как индекс элемента представляет собой его смещение в памяти относительно начала массива. Первый элемент находится ровно в начале структуры данных, поэтому его смещение равно 0, второй элемент – со смещением 1 и так далее. Такой подход упрощает адресацию и согласуется с низкоуровневыми принципами работы памяти в языках программирования.
Элементы словаря пусть и сохраняют порядок вставки элементов, но к ним нельзя обратиться по индексу. Вместо него в квадратных скобках указывается ключ словаря, по которому требуется получить значение:
plans = {"Суббота": "Сделать уборку", "Воскресенье": "Спать"}
print(plans["Воскресенье"])
# Вывод: Спать
Изменяемость коллекций
Списки, словари и множества предоставляют возможность добавлять, удалять и изменять элементы после создания.
Например, изменим элемент списка по индексу:
berries = ["Голубика", "Малина", "Ежевика"]
berries[0] = "Клюква"
print(berries)
# Вывод: ["Клюква", "Малина", "Ежевика"]
Или значение словаря по ключу:
poems = {"Гомер": "Одиссея", "Вергилий": "Энеида"}
poems["Гомер"] = "Илиада"
print(poems)
# Вывод: {'Гомер': 'Илиада', 'Вергилий': 'Энеида'}
Однако изменение по индексу элемента строки или кортежа приведет к исключению TypeError. Например, если мы хотим изменить строку "Вера" на "Лера", изменив элемент с индексом 0 на букву "Л", то это приведёт к ошибке:
name = "Вера"
name[0] = "Л"
# Ошибка: TypeError: 'str' object does not support item assignment
Это же исключение вызывается при попытке изменения элемента кортежа:
populations = (300000, 100000, 350000)
populations[1] = 420000
# Ошибка: TypeError: 'tuple' object does not support item assignment
Но если кортеж содержит изменяемые объекты, такие как списки, то сами эти объекты могут быть изменены, хотя сам кортеж останется неизменным:
countries = ("Россия", "Китай", ["Италия", "Франция"])
countries[2][1] = "Испания"
print(countries)
# Вывод: ("Россия", "Китай", ["Италия", "Испания"])
Уникальность коллекций
Множества является единственной встроенной коллекцией, которая гарантирует хранение только уникальных элементов. При добавлении уже существующего элемента, он будет автоматически проигнорирован:
numbers = {1, 2, 2, 3, 3, 3}
print(numbers)
# Вывод: {1, 2, 3}
Требование уникальности также распространяется на ключи словарей. Каждый ключ в словаре должен быть уникальным. При добавлении элемента с уже существующим ключом, старое значение будет перезаписано:
drinks = {"Сок": 2, "Чай": 1, "Морс": 3}
drinks["Сок"] = 1
print(drinks)
# Вывод: {'Сок': 1, 'Чай': 1, 'Морс': 3}
Примеры
Пример 1. Хранение координаты города
Геосервис хранит неизменяемые координаты городов в виде кортежа:
moscow_coordinates = (55.7558, 37.6176) # Координаты Москвы
print(f"Москва: широта: {moscow_coordinates[0]}, долгота: {moscow_coordinates[1]}")
Вывод:
Москва: широта: 55.7558, долгота: 37.6176
Пример 2. Список товаров в интернет-магазине
В интернет-магазине список популярных товаров в разделе «Смартфоны» хранится в виде списка, однако после обновления ассортимента модель «Samsung Galaxy S23 Ultra» уступила своё место «Sony Xperia 1 VI»:
# Список моделей смартфоноф
smartphones = [
"iPhone 14 Pro Max",
"Samsung Galaxy S23 Ultra",
"Xiaomi Mi Mix Fold 2",
"Google Pixel 7 Pro",
]
# Второй элемент находится по индексу 1
smartphones[1] = "Sony Xperia 1 VI"
print(smartphones)
Вывод:
['iPhone 14 Pro Max', 'Sony Xperia 1 VI', 'Xiaomi Mi Mix Fold 2', 'Google Pixel 7 Pro']
Пример 3. Обработка заказа клиента
Если в интернет-магазине клиент поставил галочку напротив пункта «Доставка», то к общей цене прибавляется стоимость доставки:
# Данные по заказу
order_items = {
"Название товара": "iPhone 14 Pro Max",
"Количество": 1,
"Цена": 120000,
"Доставка": True
}
# Проверяем, нужна ли доставка
if order_items["Доставка"]:
order_items["Цена"] += 500
print(f"К оплате: {order_items["Цена"]} руб.")
Вывод:
К оплате: 120500 руб.
Итоги
- Коллекции – это контейнеры для хранения множества элементов. Они отличаются по упорядоченности, изменяемости и требованиями к уникальности элементов.
- Строки – это упорядоченные и неизменяемые последовательности символов, заключённая в двойные (
") или одинарные (') кавычки: - Списки – это упорядоченные и изменяемые последовательности элементов в квадратных скобках.
- Кортежи – это упорядоченные и неизменяемые последовательности элементов в круглых скобках.
- Множества – это неупорядоченные и изменяемые наборы уникальных элементов в фигурных скобках.
- Словари – это упорядоченные и изменяемые последовательности пар «ключ-значение» в фигурных скобках.
- Элемент строки, списка и кортежа можно получить по порядковому номеру, называемому индексом. При этом в программировании принято начинать считать с 0.
Задания для самопроверки
1. Какая коллекция предназначена для хранения упорядоченной последовательности элементов, которые не могут быть изменены после создания?
Кортежи.
2. Сколько элементов будет в множестве, созданном из элементов списка numbers = [1, 2, 2, 3, 3, 3, 4] и почему?
В множестве будет 4 элемента, так как повторяющиеся значения будут проигнорированы.
3. Какие коллекции сохраняют порядок элементов?
Строки, списки, кортежи, словари.
4. Представьте, что вам нужно хранить список уникальных идентификаторов пользователей, при этом порядок не имеет значения. Какой тип коллекции будет наиболее подходящим и почему?
Множества. Они позволяют хранить уникальные и неупорядоченные элементы.
5. Что произойдет, если в строке "кора" попытаться изменить символ "к" на символ "н"?
Будет вызвано исключение TypeError, так как строки являются неизменяемой коллекцией.
0 комментариев