Ответ
В 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 (очередь с двух концов). Но это уже для продвинутой ебли, когда простые типы уже не катят.