Четыре структуры Python организуют упорядоченные, именованные и уникальные данные
Программирование

Списки, кортежи, словари и множества в Python

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

Содержание

Одно значение редко описывает всю задачу. Инвентаризация содержит несколько серверов, сервер — несколько свойств, а набор тегов не должен повторяться. Python предлагает разные структуры данных, потому что «несколько значений» ещё не объясняет, важны ли порядок, изменение, уникальность и поиск по имени.

В уроке используются переменные и базовые типы. Все примеры работают в памяти и ничего не меняют на компьютере.

Список хранит изменяемую последовательность

Список записывается в квадратных скобках. Его элементы имеют порядок и нумеруются с нуля. Создайте collections.py и запустите первый пример:

servers = ["web-01", "db-01", "backup-01"]

print(servers[0])
print(servers[-1])

Программа выведет сначала web-01, затем backup-01. Индекс 0 выбирает первый элемент, а -1 — последний. Обращение за существующими элементами не меняет список.

Если запросить servers[3], возникнет IndexError: четвёртого элемента нет. Перед доступом по вычисляемому индексу нужно проверить длину через len(servers) или строить логику без ручного индекса.

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

servers.append("worker-01")
servers[0] = "web-02"
servers.remove("backup-01")

print(servers)

После выполнения останутся web-02, db-01 и worker-01 в таком порядке. append добавляет один элемент в конец, присваивание по индексу заменяет существующий, а remove удаляет первое совпадение. Если указанного значения нет, remove вызовет ValueError; это лучше молчаливого удаления не той записи.

Срез получает часть последовательности

Срез задаётся как начало:конец, причём конечная позиция не включается. Код ниже создаёт новый список из первых двух элементов и не меняет исходный:

primary_servers = servers[0:2]
print(primary_servers)

Ожидаются web-02 и db-01. Запись servers[:2] означает то же самое. Срез полезен для страницы результатов или небольшого окна данных, но копирование очень большого списка требует дополнительной памяти.

Кортеж описывает фиксированную запись

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

endpoint = ("192.0.2.10", 443)
host, port = endpoint

print(host)
print(port)

Операция во второй строке называется распаковкой: первый элемент получает имя host, второй — port. Результат — две строки 192.0.2.10 и 443. Попытка выполнить endpoint[0] = "192.0.2.20" завершится TypeError, поскольку кортеж неизменяем.

Неизменяемость защищает форму записи от случайной правки, но не делает вложенные объекты неизменяемыми. Кортеж со списком внутри всё ещё содержит список, который можно менять.

Словарь связывает ключ со значением

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

server_ips = {
    "web-01": "192.0.2.10",
    "db-01": "192.0.2.20",
}

print(server_ips["web-01"])

Программа выведет 192.0.2.10. Строка web-01 — ключ, а IP — связанное значение. Повторная запись того же ключа заменит прежнее значение; два независимых значения под одним ключом хранить нельзя.

Обращение к отсутствующему ключу квадратными скобками вызывает KeyError. Если отсутствие ожидаемо, используйте get: выражение server_ips.get("cache-01") вернёт None, а get("cache-01", "не задан") — указанный запасной текст. Не подставляйте бездумный адрес по умолчанию там, где отсутствие конфигурации должно остановить программу.

Вложенный словарь описывает объект подробнее

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

server = {
    "hostname": "web-01",
    "ip": "192.0.2.10",
    "roles": ["nginx", "application"],
    "enabled": True,
}

print(server["hostname"])
print(server["roles"][0])

Вывод — web-01 и nginx. Сначала выбирается список по ключу roles, затем его первый элемент. Глубоко вложенные обращения трудно читать и проверять; для больших моделей позже применяют отдельные классы или специализированные схемы данных.

Множество хранит уникальные элементы

Множество создаётся фигурными скобками без пар ключ: значение. Оно автоматически убирает повторы:

tags = {"python", "linux", "python", "automation"}

print(len(tags))
print("linux" in tags)

Длина будет равна 3, а проверка принадлежности выведет True. Порядок отображения множества не следует использовать как пользовательскую сортировку. Если нужен стабильный вывод, примените sorted(tags), получив новый упорядоченный список.

Пустое множество создаётся как set(). Запись {} означает пустой словарь. Элементы множества должны быть хешируемыми — иметь стабильное представление для поиска; обычный изменяемый список элементом множества быть не может.

Выбирайте структуру по операции

Используйте список, если важны порядок и изменение; кортеж — для короткой фиксированной записи; словарь — для получения значения по смысловому ключу; множество — для уникальности и проверки принадлежности. Не выбирайте по форме скобок или привычке.

Следующий урок — циклы for и while: они обработают элементы коллекции по одному. Официальное описание операций собрано в разделе Data Structures учебника Python.

Рекламное местоВаша компания здесьРазместить рекламу

Самопроверка

Проверьте, что материал усвоен

Ответьте на все вопросы. Результат сохранится только в этом браузере и будет учтён в статистике прочитанных материалов.

01Где хранить меняющийся порядок задач?
02Какая структура связывает hostname с IP?
03Какая структура естественно убирает повторяющиеся теги?

Разбираем коротко

Частые вопросы

Чем кортеж отличается от списка?

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

Сохраняет ли словарь порядок?

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

Зачем множество, если есть список?

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