Введение в коллекции
Встроенные типы данных в Python позволяют эффективно работать с информацией различного формата. И если числовые и логические типы предназначены для хранения отдельных значений, то коллекции служат контейнерами для одновременного хранения множества элементов.
Коллекции в Python представлены такими типами данных, как уже знакомые нам строки, списки, кортежи, множества и словари. Каждый из этих типов предназначен для решения определённых задач и обладает уникальными свойствами, влияющими на способ хранения и обработку данных.
Каждая встроенная коллекция обладает уникальным набором свойств, определяемых её упорядоченностью, изменяемостью и требованиями к уникальности элементов. Выбор подходящей коллекции зависит от конкретной задачи и требований к хранению и обработке данных.
Название | Пример | Упорядоченность | Изменяемость | Уникальность |
---|---|---|---|---|
Строки | "Александр" |
✅ | ❌ | ❌ |
Списки | ["Хлеб", "Молок", "Колбаса"] |
✅ | ✅ | ❌ |
Кортежи | ("Математика", "Математика") |
✅ | ❌ | ❌ |
Множества | {1, 2, 3, 4, 5} |
❌ | ✅ | ✅ |
Словари | {"Россия": "Москва", "Китай": "Пекин"} |
❌ (с 3.7 – ✅) | ✅ | ключи – ✅ значения – ❌ |
Основные коллекции
Давайте кратко рассмотрим каждую из встроенных коллекций, представленных в Python.
1. Cтроки, которые мы уже неоднократно использовали, представляют собой упорядоченную последовательность символов, заключённую в двойные "
или одинарные '
кавычки:
username = "Sauron999"
Строки неизменяемы, то есть мы не можем изменить отдельные символы в строке после её создания. Поэтому все операции над строками на самом деле создают новую строку.
2. Списки – наиболее гибкая и часто используемая коллекция в Python, которая содержит упорядоченный набор элементов в квадратных скобках []
:
books = ["Хоббит, или Туда и обратно", "Баллада об Аотру и Итрун", "Братство Кольца"]
Списки изменяемы, поэтому мы можем свободно добавлять, удалять и изменять их элементы.
3. Кортежи, как и списки, хранят элементы в определённом порядке, однако они неизменяемы и создаются с помощью круглых скобок ()
:
hobbits = ("Фродо Бэггинс", "Бильбо Бэггинс")
После создания кортежа в него невозможно внести какие-либо изменения, что делает его полезным для хранения данных, которые не должны подвергнуться случайным изменениям, например, какие-то константы.
4. Множества в Python представляют собой неупорядоченную коллекцию уникальных элементов. Они во многом напоминают математические множества и определяются путем перечисления элементов в фигурных скобках {}:
regions = {"Хоббитон", "Тростниковая Топь", "Иглоушко", "Малоройка"}
Множества являются изменяемыми, что позволяет добавлять, изменять и удалять элементы. Однако, как уже упоминалось, они гарантируют, что каждый элемент в множестве будет присутствовать только один раз.
5. Словари в Python очень похожи на словари в реальной жизни, и организуют данные в виде пар «ключ-значение», заключённых в фигурные скобках {}
:
heroes = {"Арагорн": 2931, "Леголас": 3018, "Бард I": 2941}
Ключи словаря должны быть уникальными, в то время как значения могут повторяться. Словари изменяемы, что позволяет добавлять, удалять и изменять пары «ключ-значение».
Исторически словари считались неупорядоченными коллекциями. Однако начиная с Python 3.7, словари гарантированно сохраняют порядок вставки элементов.
Упорядоченность коллекций
Строки, списки, кортежи и словари обладают свойством упорядоченности, то есть порядок, в котором элементы были добавлены в коллекцию, сохраняется.
При этом в строках, списках и словарях каждый элемент имеет свой порядковый номер, называемый индексом, по которому можно получить этот элемент, указав его в квадратных скобках:
sport = ["Теннис", "Футбол", "Волейбол"]
print(sport[1])
# Вывод: Футбол
В программировании принято начинать считать с 0
, поэтому первый элемент "Теннис"
находится по индексу 0
, второй элемент "Футбол"
– по индесу 1
и так далее. Более подробно механизм работы с такими коллекциями мы рассмотрим далее.
Однако несмотря на то, что элементы словаря сохраняют порядок вставки элементов, к ним нельзя обратиться по индексу. Для того, чтобы получить значение словаря, вместо индекса в квадратных скобках указывается нужных ключ:
sportsmen = {"Том Брэди": 8, "Майкл Фелпс": 7}
print(sportsmen["Том Брэди"])
# Вывод: 8
Изменяемость коллекций
Списки, словари и множества предоставляют возможность добавлять, удалять и изменять элементы после создания.
Например, изменим элемент списка по индексу:
berries = ["Голубика", "Малина", "Ежевика"]
berries[0] = "Клюква"
print(berries)
# Вывод: ["Клюква", "Малина", "Ежевика"]
Или значение словаря по ключу:
poems = {"Гомер": "Одиссея", "Вергилий": "Энеида"}
poems["Гомер"] = "Илиада"
print(poems)
# Вывод: {'Гомер': 'Илиада', 'Вергилий': 'Энеида'}
В множествах нельзя напрямую обращаться к элементам, но можно добавить новый элемент с помощью метода set.add()
:
currencies = {"Белорусский рубль", "Казахский тенге"}
currencies.add("Армянский драм")
print(currencies)
# Вывод: {"Белорусский рубль", "Казахский тенге", "Армянский драм"}
Однако изменение по индексу элемента строки или кортежи приведет к исключению TypeError.
Например, если мы хотим изменить имя "Вера"
на "Лера"
, изменив элемент с индексом 0
на букву "Л"
, то это приведёт к ошибке:
name = "Вера"
name[0] = "Л"
# Ошибка: TypeError: 'str' object does not support item assignment
Изменение элемента кортежа по индексу также вызовет исключение TypeError
:
populations = (300000, 100000, 350000)
populations[1] = 420000
# Ошибка: TypeError: 'tuple' object does not support item assignment
Но если кортеж содержит изменяемые объекты, такие как списки, то сами эти объекты могут быть изменены, хотя сам кортеж остается неизменным:
countries = ("Россия", "Китай", ["Италия", "Франция"])
cities[2][1] = "Италия"
print(cities)
# Вывод: ("Россия", "Китай", ["Италия", "Франция"])
Уникальность коллекций
Множество является единственной встроенной коллекцией, которая гарантирует хранение только уникальных элементов. При попытке добавить уже существующий элемент, он будет автоматически проигнорирован:
numbers = {1, 2, 2, 3, 3, 3}
print(numbers)
# Вывод: {1, 2, 3}
Требование уникальности также распространяется на ключи словарей. Каждый ключ в словаре должен быть уникальным. При добавлении элемента с уже существующим ключом, старое значение будет заменено новым:
drinks = {"Сок": 2, "Чай": 1, "Морс": 3}
drinks["Сок"] = 1
print(drinks)
# Вывод: {'Сок': 1, 'Чай': 1, 'Морс': 3}
1. Какая коллекция предназначена для для хранения упорядоченной последовательности элементов, которые не могут быть изменены после создания?
2. Создайте множество из следующего списка: [1, 2, 2, 3, 3, 3, 4]
. Сколько элементов будет в таком множестве и почему?
3. Какие коллекции сохраняют порядок, в котором элементы были добавлены в коллекцию?
4. Представьте, что вам нужно хранить список уникальных идентификаторов пользователей, при этом порядок не имеет значения. Какой тип коллекции будет наиболее подходящим и почему?
5. Что произойдет, если в строке "кора"
попытаться изменить символ "к"
на символ "н"
?