Ты уже знаешь и списки ([]), и словари ({}). Оба — тачки для данных. Но новичок постоянно тупит: что взять, когда?
Сейчас разложу по полочкам так, что запомнишь навсегда. Поехали.
1. Список — это советская очередь
Представь очередь в поликлинике. У каждого талончик с номером: 0, 1, 2, 3...
```python
queue = ["Анна", "Олег", "Марина", "Саша"]
# queue[0] -> "Анна"
# queue[2] -> "Марина"
```
Плюсы списка:
· бешенная скорость обхода подряд (for item in list)
· порядок сохраняется всегда
· можно вставлять/удалять с концов за O(1)
Минусы:
· чтобы найти "Марина", нужно перебрать всех (медленно при 100500 элементах)
· если вставишь в середину — всё переиндексируется (тормоза)
2. Словарь — это шкаф с наклейками
Никаких номеров. Ты сам лепишь на каждую ячейку понятную бирку: "имя", "возраст", "телефон".
```python
catalog = {
"iPhone": 100000,
"Samsung": 80000,
"Xiaomi": 40000
}
# catalog["iPhone"] -> 100000 мгновенно
```
Плюсы словаря:
· доступ по ключу за O(1) — МГНОВЕННО, даже если миллиард элементов
· ключи осмысленные: не помнить index=5, а писать user["phone"]
· гибкая структура: значениями могут быть что угодно
Минусы:
· занимает больше памяти (хранит хэши ключей)
· нет порядка (условно, хотя с Python 3.7 он сохраняется, но на это не рассчитывают)
· чуть медленнее на маленьких объёмах
3. А теперь главное: КОГДА что ЮЗАТЬ?
Бери СПИСОК, если:
✅ Тебе важен порядок элементов
✅ Ты будешь перебирать всё подряд (for item in items)
✅ Нужно хранить однотипные штуки (только имена, только числа)
✅ Доступ по номеру — это логично (топ-10 фильмов, очередь задач)
```python
# Хороший список
top_movies = ["Побег из Шоушенка", "Крёстный отец", "Тёмный рыцарь"]
daily_temperatures = [23.5, 24.1, 22.8, 23.0]
```
Бери СЛОВАРЬ, если:
✅ Нужен быстрый поиск по уникальному ключу
✅ У данных есть явные имена (id, логин, артикул)
✅ Структура сложная: у одного объекта много полей
✅ Ты работаешь с JSON/API — там почти всегда словари
```python
# Хороший словарь
user_profile = {
"id": 777,
"name": "Антон",
"is_admin": True,
"orders": [101, 102, 103]
}
# Поиск цены товара по артикулу
prices = {"A001": 500, "B002": 1200, "C003": 340}
```
4. Живой пример — где новички ломают зубы
Задача: у тебя список имён и список зарплат. Нужно найти зарплату Олега.
❌ ПЛОХОЕ решение (список для поиска):
```python
names = ["Анна", "Олег", "Марина"]
salaries = [50000, 70000, 60000]
# Найти индекс Олега
index = names.index("Олег") # O(n) — полный перебор
print(salaries[index])
```
✅ ХОРОШЕЕ решение (словарь):
```python
data = {"Анна": 50000, "Олег": 70000, "Марина": 60000}
print(data["Олег"]) # O(1) — моментально
```
Разница при 10000 элементов: словарь отработает за 0.0001 секунды, список — за 0.5 секунды. Чувствуешь?
5. Когда можно и то, и то (но лучше комбо)
Иногда умные ребята делают список словарей — это база данных в миниатюре.
```python
users = [
{"id": 1, "name": "Анна", "age": 25},
{"id": 2, "name": "Олег", "age": 30},
{"id": 3, "name": "Марина", "age": 28}
]
# Найти Анну
for user in users:
if user["name"] == "Анна":
print(user["age"])
```
Или словарь списков — удобно для группировки:
```python
grades = {
"Математика": [5, 4, 5, 5],
"Физика": [4, 4, 3, 5],
"Информатика": [5, 5, 5, 4]
}
```
6. Чек-лист перед выбором (повесь на стену)
Задай себе 3 вопроса:
1. Мне нужен порядок? Да → список. Нет → словарь.
2. Я буду часто искать по значению? Да → словарь. Нет → список.
3. Данные — это просто список однотипных вещей? Да → список. Нет (разные поля) → словарь.
7. Жестокая правда
· Использовать список для поиска по имени — признак дилетанта.
· Использовать словарь с ключами "0","1","2"... — извращение (бери список).
· Засовывать 10 полей в список и помнить, что data[3] — это возраст, а data[4] — город — путь в ад. Только словарь.
Финальный удар
Вот тебе код для закрепления. Угадай, что быстрее найдёт "Python" в 100000 элементов?
```python
# Словарь
tech_dict = {f"lang_{i}": f"value_{i}" for i in range(100000)}
tech_dict["python"] = "Python"
# Список
tech_list = [f"value_{i}" for i in range(100000)] + ["Python"]
# Поиск в словаре (моментально)
if "python" in tech_dict:
print("Нашёл за 0.0001 сек")
# Поиск в списке (медленно)
if "Python" in tech_list:
print("Нашёл за 0.05 сек")
```
Правильный выбор структуры данных — это 50% успеха в Python. Остальное — практика.
---
Подписывайся, если хочешь следующую битву:
→ Кортежи против списков
→ Множества против словарей
→ Когда использовать array из модуля array
Не будь нубом — выбирай правильные структуры. ✊