tariel.ge › Полезное: бесплатные книги › Программирование: от нулей и единиц до PythonБесплатно · автор Тариел Бежанидзе
← Учебник по программированию ЛИСТ 17БЛОК 3 — PYTHON: ОСНОВЫРЕВ. 1
Глава 17 · Python: основы

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

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

Почему индексация начинается с нуля

Не произвол, а прямое следствие темы главы 01

Индекс элемента в списке — это на самом деле смещение (offset) от начала коллекции в памяти, а не порядковый номер "по-человечески". Первый элемент находится прямо в начале, то есть смещение от начала до него равно нулю — отсюда индекс 0, а не 1. Это прямое практическое продолжение темы адресации памяти байтами (глава 01) — соглашение, унаследованное современными языками от гораздо более низкоуровневой логики работы с памятью, а не случайный выбор дизайнеров языка.

Список (list) — упорядоченная изменяемая коллекция

fruits = ["яблоко", "банан", "вишня"]
print(fruits[0]) # яблоко — первый элемент, индекс 0
print(fruits[-1]) # вишня — отрицательный индекс считает с конца
print(fruits[0:2]) # ['яблоко', 'банан'] — срез (slice)

fruits.append("груша") # добавить в конец
fruits.remove("банан") # удалить конкретный элемент по значению
fruits.sort() # отсортировать на месте

Список можно изменять после создания — добавлять, удалять, менять элементы по индексу. Списочное включение (list comprehension) — компактный способ создать список на основе другой последовательности:

squares = [x ** 2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]

Кортеж (tuple) — тот же список, но неизменяемый

point = (3, 7)
x, y = point # распаковка — та же идея, что множественный return из главы 16

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

Словарь (dict) — пары "ключ → значение"

person = {"имя": "Тариэл", "возраст": 25}
print(person["имя"]) # Тариэл
person["город"] = "Батуми" # добавить новую пару

if "возраст" in person:
    print("ключ есть")

Доступ к значению — не по числовому индексу, а по ключу. Начиная с Python 3.7, словари гарантированно сохраняют порядок добавления ключей (раньше на это нельзя было полагаться). Методы .keys(), .values(), .items() дают доступ отдельно к ключам, отдельно к значениям, или сразу к парам ключ-значение вместе.

Множество (set) — только уникальные значения, без порядка

numbers = {1, 2, 2, 3, 3, 3}
print(numbers) # {1, 2, 3} — дубликаты автоматически убраны

a = {1, 2, 3}
b = {2, 3, 4}
print(a & b) # {2, 3} — пересечение
print(a | b) # {1, 2, 3, 4} — объединение

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

Сравнительная таблица

СтруктураСинтаксисИзменяемаяУпорядоченнаяДубликаты
Список[ ]ДаДаРазрешены
Кортеж( )НетДаРазрешены
Словарь{ключ: значение}ДаДа (порядок добавления)Ключи уникальны
Множество{ }ДаНетНе допускаются

Практический пример: список словарей — типовой шаблон реальных данных

users = [
    {"имя": "Тариэл", "возраст": 25},
    {"имя": "Анна", "возраст": 30},
]

for user in users:
    print(f"{user['имя']}: {user['возраст']} лет")

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

Что дальше

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

Глава17 — Списки, словари, кортежи, множества
Блок3 — Python: основы
Далее18 — Строки и работа с текстом
СтатусГотово · рев. 1
Предыдущая глава ← 16 · Функции Следующая глава 18 · Строки и работа с текстом →

Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.