Какие основные встроенные типы коллекций есть в Python?

Ответ

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

Тип Изменяемость Упорядоченность Уникальность элементов Синтаксис Основное назначение
list (список) Да (mutable) Да (индексы) Нет (дубликаты разрешены) [1, 2, 3] или list() Упорядоченная коллекция для хранения последовательностей.
tuple (кортеж) Нет (immutable) Да (индексы) Нет (1, 2, 3) или tuple() Неизменяемая упорядоченная коллекция (часто для констант, возврата нескольких значений).
set (множество) Да (mutable) Нет (нет индексов) Да (только уникальные) {1, 2, 3} или set() Коллекция для проверки принадлежности и операций над множествами (объединение, пересечение).
dict (словарь) Да (mutable) Да (с Python 3.7+ порядок вставки) Ключи — Да, значения — Нет {'a': 1, 'b': 2} или dict() Коллекция пар «ключ-значение» для ассоциативного хранения данных.

Примеры использования и ключевые операции:

# 1. СПИСОК (list) - изменяемый массив
fruits = ["apple", "banana", "cherry"]
fruits.append("orange")  # Добавить в конец
fruits[1] = "blueberry"   # Изменить элемент по индексу
print(fruits[0])          # Доступ по индексу -> "apple"

# 2. КОРТЕЖ (tuple) - неизменяемый список
coordinates = (10.0, 20.0)
# coordinates[0] = 5.0  # Вызовет TypeError: 'tuple' object does not support item assignment
x, y = coordinates      # Распаковка кортежа

# 3. МНОЖЕСТВО (set) - уникальные неупорядоченные элементы
unique_numbers = {1, 2, 3, 3, 2}  # -> {1, 2, 3}
unique_numbers.add(4)
print(2 in unique_numbers)        # Быстрая проверка принадлежности -> True

# 4. СЛОВАРЬ (dict) - ассоциативный массив
user = {"name": "Alice", "age": 30}
user["job"] = "Engineer"         # Добавить/изменить значение по ключу
print(user.get("name"))           # Получить значение -> "Alice"
for key, value in user.items():   # Итерация по парам
    print(f"{key}: {value}")

# 5. frozenset - неизменяемое множество (специальный тип)
immutable_set = frozenset([1, 2, 3])
# Полезно для использования в качестве ключа словаря
valid_configs = {frozenset(["ssl", "compression"]): "config_1"}

Дополнительно: Модуль collections предоставляет специализированные типы, такие как defaultdict, Counter, OrderedDict (менее актуален с Python 3.7), deque.

Ответ 18+ 🔞

А, вот это я понимаю, тема! Сидишь ты такой, пишешь на Python, и тут бац — нужно выбрать, куда свои данные засунуть. А вариантов-то, блядь, целых четыре основных, и у каждого своя хитрая жопа. Давай разбираться, пока не началась ебля с TypeError.

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

Тип Менять можно? Порядок есть? Повторы? Как выглядит Зачем нужен?
list (список) Да, конечно Да, по индексу Да, хоть сто раз [1, 2, 3] Упорядоченная куча всего подряд.
tuple (кортеж) Нет, ни хуя! Да, по индексу Да (1, 2, 3) Закостенелая последовательность, чтоб никто не накосячил.
set (множество) Да Нет, там бардак Нет, только уникальное {1, 2, 3} Чтобы быстро проверить, есть ли элемент, и делать операции как в школе.
dict (словарь) Да Да (с 3.7 порядок вставки) Ключи — Нет, значения — Да {'a': 1} Хранить пары "ключ-значение", как записная книжка.

А теперь, блядь, живые примеры, чтобы в пендюре не путаться:

# 1. СПИСОК (list) - твой основной рабочий инструмент, как молоток
fruits = ["apple", "banana", "cherry"]
fruits.append("orange")  # Впендюрил в конец
fruits[1] = "blueberry"   # Перетер банан черникой
print(fruits[0])          # Достал первое -> "apple"

# 2. КОРТЕЖ (tuple) - забетонированная штука
coordinates = (10.0, 20.0)
# coordinates[0] = 5.0  # ПЫТАЕШЬСЯ ИЗМЕНИТЬ? Получишь: TypeError, ёпта!
x, y = coordinates      # А вот распаковать — это пожалуйста

# 3. МНОЖЕСТВО (set) - мешок с уникальным хламом
unique_numbers = {1, 2, 3, 3, 2}  # Засыпал повторы -> {1, 2, 3}, остальное выкинуло
unique_numbers.add(4)              # Подкинул четвёрку
print(2 in unique_numbers)        # "Двойчка есть?" -> True, мгновенно!

# 4. СЛОВАРЬ (dict) - умная картотека
user = {"name": "Alice", "age": 30}
user["job"] = "Engineer"         # Добавил новую пару "работа-инженер"
print(user.get("name"))           # Спросил по ключу -> "Alice"
for key, value in user.items():   # Прошёлся по всем записям
    print(f"{key}: {value}")

# 5. frozenset - множества, но в бронежилете
immutable_set = frozenset([1, 2, 3])
# Их, сука, можно даже ключом в словарь сделать!
valid_configs = {frozenset(["ssl", "compression"]): "config_1"}

И запомни, чувак: если этих четырёх тебе мало, есть ещё модуль collections. Там такие штуки, как defaultdict (чтоб не париться с проверками), Counter (считалка всего на свете) и deque (очередь с двух концов). Но это уже для продвинутой ебли, когда простые типы уже не катят.