Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между словарём и списком в Python
Это две фундаментальные структуры данных в Python, и выбор между ними влияет на производительность и удобство кода.
Что такое список?
Список - это упорядоченная коллекция элементов, индексируемая по позиции (0, 1, 2, ...).
# Создание списка
my_list = [1, 2, 3, 4, 5]
print(my_list) # [1, 2, 3, 4, 5]
# Доступ по индексу
print(my_list[0]) # 1
print(my_list[2]) # 3
print(my_list[-1]) # 5 (последний элемент)
# Список может содержать разные типы
mixed_list = [1, "text", 3.14, True, None]
print(mixed_list) # [1, 'text', 3.14, True, None]
Что такое словарь?
Словарь - это неупорядоченная коллекция пар ключ-значение, индексируемая по ключу.
# Создание словаря
my_dict = {"name": "John", "age": 30, "city": "New York"}
print(my_dict) # {'name': 'John', 'age': 30, 'city': 'New York'}
# Доступ по ключу
print(my_dict["name"]) # John
print(my_dict["age"]) # 30
# Словарь может содержать разные типы значений
my_dict = {"string": "text", "number": 42, "list": [1, 2, 3]}
print(my_dict["list"]) # [1, 2, 3]
Основные различия
| Параметр | Список | Словарь |
|---|---|---|
| Структура | Упорядоченная коллекция | Пары ключ-значение |
| Индексация | По позиции (0, 1, 2, ...) | По ключу |
| Синтаксис создания | [элемент1, элемент2] | {ключ1: значение1, ключ2: значение2} |
| Порядок | Порядок сохраняется | В Python 3.7+ порядок сохраняется |
| Скорость поиска | O(n) линейный поиск | O(1) прямой доступ |
| Скорость доступа | O(1) по индексу | O(1) по ключу |
| Ключи | Индексы (числа) | Любые хешируемые объекты |
| Возможность изменения | Изменяемый | Изменяемый |
| Дубликаты | Могут быть | Ключи уникальны |
| Пример | [1, 2, 3] | {"a": 1, "b": 2} |
Практический пример: список
# Список хорош, когда важен порядок
todo_list = ["Купить молоко", "Написать код", "Прочитать книгу"]
# Итерация сохраняет порядок
for i, task in enumerate(todo_list):
print(f"{i+1}. {task}")
# 1. Купить молоко
# 2. Написать код
# 3. Прочитать книгу
# Добавление в конец
todo_list.append("Погулять")
print(todo_list) # [..., 'Погулять']
# Вставка в позицию
todo_list.insert(1, "Позвонить другу")
print(todo_list) # ['Купить молоко', 'Позвонить другу', 'Написать код', ...]
# Удаление
todo_list.remove("Купить молоко")
todo_list.pop(0) # Удаление по индексу
Практический пример: словарь
# Словарь хорош, когда нужно связать данные
user = {
"id": 1,
"name": "John",
"email": "john@example.com",
"age": 30
}
# Быстрый доступ по ключу
print(user["email"]) # john@example.com
print(user["name"]) # John
# Проверка наличия ключа
if "age" in user:
print(f"Возраст: {user['age']}") # Возраст: 30
# Добавление нового ключа
user["city"] = "New York"
print(user) # {..., 'city': 'New York'}
# Удаление ключа
del user["age"]
user.pop("city")
# Получение с дефолтным значением
print(user.get("age", 25)) # 25 (если ключа нет)
print(user.get("name", "Unknown")) # John
Производительность: поиск элемента
import time
# Список: поиск O(n)
my_list = list(range(1_000_000))
start = time.time()
999_999 in my_list # Ищет с конца
list_time = time.time() - start
print(f"Список: {list_time:.4f} сек")
# Словарь: поиск O(1)
my_dict = {i: i for i in range(1_000_000)}
start = time.time()
999_999 in my_dict # Прямой доступ
dict_time = time.time() - start
print(f"Словарь: {dict_time:.6f} сек")
# Словарь на 10000x быстрее!
print(f"Словарь быстрее в {list_time / dict_time:.0f}x раз")
Когда использовать список?
Используй список, если:
- Порядок важен (задачи, события по времени)
- Нужно итерировать по всем элементам
- Нужны индексы (получить элемент по позиции)
- Данные однородны (все одного типа)
- Нужны операции типа append, insert, pop
# Список оценок студента
grades = [85, 90, 78, 92, 88]
print(f"Первая оценка: {grades[0]}") # 85
print(f"Последняя оценка: {grades[-1]}") # 88
print(f"Средняя: {sum(grades) / len(grades)}") # 86.6
# История платежей (порядок критичен)
payments = [
{"date": "2024-01-01", "amount": 100},
{"date": "2024-01-05", "amount": 50},
{"date": "2024-01-10", "amount": 200},
]
for i, payment in enumerate(payments):
print(f"Платёж {i+1}: {payment['amount']} от {payment['date']}")
Когда использовать словарь?
Используй словарь, если:
- Нужен быстрый поиск по ключу
- Данные неоднородны (разные типы значений)
- Нужно связать данные (ключ-значение)
- Ключи имеют смыслическое значение
- Нужна гибкость структуры
# Профиль пользователя
user_profile = {
"id": 123,
"username": "john_doe",
"email": "john@example.com",
"is_active": True,
"followers": 1250,
"bio": "Python developer"
}
# Быстрый доступ
print(user_profile["email"]) # john@example.com
# Конфигурация приложения
config = {
"DEBUG": True,
"DATABASE_URL": "postgresql://...",
"SECRET_KEY": "...",
"ALLOWED_HOSTS": ["localhost", "127.0.0.1"],
"TIMEOUT": 30
}
print(config.get("DEBUG")) # True
Сложные структуры: смешивание
# Словарь со списками
school = {
"name": "School #1",
"students": ["John", "Alice", "Bob"],
"classes": {
"math": ["John", "Alice"],
"english": ["Bob", "Alice"]
}
}
print(school["students"][0]) # John
print(school["classes"]["math"]) # ['John', 'Alice']
# Список словарей
users = [
{"id": 1, "name": "John", "age": 30},
{"id": 2, "name": "Alice", "age": 25},
{"id": 3, "name": "Bob", "age": 28}
]
print(users[0]["name"]) # John
for user in users:
print(f"{user['name']}: {user['age']} лет")
Методы: список
my_list = [3, 1, 4, 1, 5]
my_list.append(9) # Добавить в конец
my_list.insert(0, 2) # Вставить в позицию
my_list.remove(4) # Удалить по значению
my_list.pop() # Удалить последний
my_list.clear() # Очистить
my_list.copy() # Копировать
my_list.count(1) # Считать вхождения
my_list.index(3) # Индекс элемента
my_list.sort() # Сортировать
my_list.reverse() # Развернуть
Методы: словарь
my_dict = {"a": 1, "b": 2, "c": 3}
my_dict["d"] = 4 # Добавить/изменить
my_dict.get("a") # Получить с default=None
my_dict.get("x", 0) # Получить с дефолтом
my_dict.pop("b") # Удалить и вернуть
my_dict.clear() # Очистить
my_dict.keys() # Все ключи
my_dict.values() # Все значения
my_dict.items() # Пары ключ-значение
my_dict.update({"e": 5}) # Обновить
Сравнение памяти
import sys
# Список
my_list = [1, 2, 3, 4, 5]
print(f"Список: {sys.getsizeof(my_list)} байт")
# Словарь
my_dict = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}
print(f"Словарь: {sys.getsizeof(my_dict)} байт")
# Словарь обычно больше, но быстрее
Итоговый вывод
| Выбирай | Если |
|---|---|
| Список | Порядок важен, нужна индексация, однородные данные |
| Словарь | Нужен быстрый поиск, структурированные данные, ключи имеют смысл |
Золотое правило: Используй список для коллекций, словарь для отображений (mapping).