Курс Python → Сложные типы данных в Python

Сложные типы данных Python, или составные типы, — это, по сути, контейнеры. Они не хранят одно-единственное значение, а объединяют в себе множество других значений. Причем эти значения могут быть как простыми (числа, строки, булевы), так и другими сложными типами. Это как конструктор LEGO: из мелких деталей вы собираете что-то большое и функциональное. В Python есть четыре основных «строительных блока» — четыре сложных типа данных, которые являются фундаментом для большинства программ:

  • Списки (list): упорядоченные, изменяемые коллекции элементов.
  • Кортежи (tuple): упорядоченные, но неизменяемые коллекции.
  • Множества (set): неупорядоченные коллекции уникальных элементов.
  • Словари (dict): неупорядоченные коллекции пар «ключ-значение».

Каждый из них имеет свои уникальные свойства и идеально подходит для решения определенных задач. Понимание разницы и умение выбирать правильный тип — это уже половина успеха в программировании на Python.

Список Python: гибкость и изменяемость

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

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

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

# Пример создания списка
фрукты = ["яблоко", "банан", "апельсин"]
числа = [1, 2, 3, 4, 5]
смешанный_список = ["текст", 123, True, [1, 2]]

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

первый_фрукт = фрукты[0]  # "яблоко"

А срезы позволяют вам получить целые фрагменты списка:

часть_фруктов = фрукты[1:3] # ["банан", "апельсин"]

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

Кортеж Python: неизменяемая структура для безопасности

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

Кортежи создаются с помощью круглых скобок:

# Пример создания кортежа
координаты = (10.0, 20.5)
цвета_rgb = (255, 0, 128)

Доступ к элементам кортежа осуществляется точно так же, как и в списках, — по индексу:

широта = координаты[0]  # 10.0

Но если вы попытаетесь изменить элемент, Python выдаст ошибку:

# Попытка изменить элемент кортежа (вызовет ошибку TypeError)
# цвета_rgb[0] = 250

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

Множество Python: уникальность и скорость операций

Множества Python — это что-то вроде коллекции жетонов, где каждый жетон уникален, и порядок их расположения не имеет никакого значения. Забудьте про индексы и последовательности! Основное свойство множеств — уникальность элементов. Если вы попытаетесь добавить в множество элемент, который там уже есть, ничего не произойдет. Это делает множества идеальным инструментом для:

  • Быстрой проверки на вхождение элемента.
  • Удаления дубликатов из других коллекций.
  • Выполнения математических операций над множествами (объединение, пересечение, разность).

Создаются множества с помощью фигурных скобок:

# Пример создания множества
уникальные_числа = {1, 2, 3, 2, 1, 4, 5}
print(уникальные_числа) # Выведет: {1, 2, 3, 4, 5}

Для добавления элементов используется метод add():

уникальные_числа.add(6)

Проверка на вхождение происходит очень быстро:

if 3 in уникальные_числа:
    print("Число 3 есть в множестве!")

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

Словарь Python: эффективное хранение по ключу

Словари Python — это, пожалуй, самый близкий аналог реальных словарей, которые мы используем для поиска значений по словам. В Python словарь хранит данные в виде пар «ключ-значение». Вместо того чтобы искать элемент по его порядковому номеру, как в списках или кортежах, вы обращаетесь к нему по уникальному ключу. Это делает доступ к данным невероятно быстрым и удобным, особенно когда вам нужно сопоставить какую-то информацию с её описанием.

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

# Пример создания словаря
студент = {
    "имя": "Иван",
    "возраст": 20,
    "специальность": "Программирование"
}

Чтобы получить значение, нужно указать его ключ:

имя_студента = студент["имя"]  # "Иван"

Добавить новую пару или изменить существующую тоже очень просто:

студент["город"] = "Москва"  # Добавление новой пары
студент["возраст"] = 21      # Изменение существующего значения

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

Преобразование между сложными типами Python

Иногда возникает необходимость преобразовать данные из одного сложного типа в другой. Например, у вас есть список, но для какой-то операции он лучше подойдет в виде кортежа, или вам нужно быстро удалить дубликаты из списка, превратив его во множество. Python предоставляет удобные встроенные функции для таких преобразований.

Самые частые сценарии:

  • Список в кортеж: Используйте функцию tuple().
  • Кортеж в список: Используйте функцию list().
  • Список в множество: Используйте функцию set() (это отличный способ получить уникальные элементы).
  • Множество в список или кортеж: Используйте list() или tuple().
  • Строку в список: Используйте list(), чтобы получить список символов, или метод .split() для разделения по определенному разделителю.

Приведем пример:

мой_список = [1, 2, 2, 3, 4, 4, 4]
мой_кортеж = tuple(мой_список)
уникальные_элементы = set(мой_список)

print(мой_кортеж)      # Выведет: (1, 2, 2, 3, 4, 4, 4)
print(уникальные_элементы) # Выведет: {1, 2, 3, 4}

строка = "hello"
список_из_строки = list(строка)
print(список_из_строки) # Выведет: ['h', 'e', 'l', 'l', 'o']

Эти преобразования делают код более гибким и позволяют эффективно использовать возможности каждого типа данных.

Когда какой тип данных Python выбрать?

Понимание того, когда использовать список, когда кортеж, множество или словарь, — это ключевой навык для любого Python-разработчика. Вот несколько простых ориентиров, которые помогут вам сделать правильный выбор:

  • Если вам нужна упорядоченная коллекция, которую можно изменять (добавлять, удалять, редактировать элементы): Ваш выбор — список (list). Это самый универсальный вариант.
  • Если вам нужна упорядоченная коллекция, но её содержимое должно оставаться неизменным после создания (для безопасности или как ключ словаря): Используйте кортеж (tuple).
  • Если вам нужна коллекция уникальных элементов, и порядок не имеет значения, а также вам нужны быстрые операции проверки на вхождение или математические операции над коллекциями: Ваш выбор — множество (set).
  • Если вам нужно хранить данные в виде пар «ключ-значение», где доступ к элементу осуществляется по его уникальному имени (ключу): Используйте словарь (dict).

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

Создаем свои сложные типы данных

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

Например, представьте, что вам нужно хранить информацию о нескольких студентах, и для каждого студента — список его оценок. Можно использовать список словарей:

студенты = [
    {"имя": "Анна", "оценки": [5, 4, 5]},
    {"имя": "Борис", "оценки": [3, 4, 4]},
    {"имя": "Вера", "оценки": [5, 5, 5]}
]

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

предметы_оценки = {
    "Математика": {"5": ["Анна", "Вера"], "4": ["Борис"]},
    "История": {"5": ["Вера"], "4": ["Анна", "Борис"]}
}

Такие составные структуры данных делают код гибким и позволяют моделировать даже самые замысловатые отношения между данными. Практикуйтесь в их создании, и вы увидите, насколько мощным инструментом является Python!

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Генераторы списков в Python
  2. Библиотека sh: использование команд bash в Python
  3. Объединение списков в строку
  4. Работа с itertools
  5. Mad Libs Generator
  6. Переопределение метода __floordiv__
  7. Контекстный менеджер в Python
  8. Создание панели меню Tkinter
  9. capitalize() — изменение регистра первого символа строки
  10. Удаление элементов по срезу
  11. Принципы Zen Python
  12. Расширение операции побитового «и» в Python
  13. Измерение времени выполнения кода с помощью time
  14. Создание итерируемых объектов
  15. Кортежи в Python: особенности и преимущества
  16. Изменение переменной в Python: nonlocal
  17. Списки: объединение, изменение
  18. Отрицательные индексы списков в Python
  19. Работа с файлами в Python
  20. Извлечение статей с newspaper3k
  21. Работа с контекстным менеджером Pool
  22. ChainMap избыточные ключи
  23. Автоматизация с Python
  24. Управление мышью и клавиатурой с Pyautogui
  25. Замена текста с помощью sub
  26. Методы classmethod и staticmethod
  27. Оператор * в Python
  28. Операторы присваивания в Python
  29. Область видимости переменных
  30. Работа с JSON в Python
  31. Получение значений из словарей
  32. Функция map() в Python
  33. Фильтрация данных в Python.
  34. Константы в модуле cmath
  35. CSV строка разделение в Python
  36. Поиск уникальных и повторяющихся элементов
  37. Функция zip() в Python
  38. Считывание бинарного файла в Python
  39. Работа с пользовательским вводом
  40. Использование эмодзи в Python
  41. Хранение переменных в словаре.
  42. Декораторы для регистрации функций
  43. Python itertools combinations() — группировка элементов
  44. Склеивание строк без циклов
  45. Декораторы в Python

Marketello читают маркетологи из крутых компаний