Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между списком и словарем в Python
Основные характеристики
Список (List)
Упорядоченная коллекция элементов, доступ по индексу (позиции):
# Создание списка
numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "cherry"]
mixed = [1, "hello", 3.14, True]
# Доступ по индексу (с нуля)
print(numbers[0]) # 1
print(fruits[1]) # banana
print(numbers[-1]) # 5 (последний элемент)
# Срезы
print(numbers[1:3]) # [2, 3]
print(numbers[:2]) # [1, 2]
print(numbers[::2]) # [1, 3, 5] (каждый второй)
Словарь (Dictionary)
Неупорядоченная (в Python 3.7+ упорядоченная) коллекция пар ключ-значение:
# Создание словаря
person = {"name": "John", "age": 30, "city": "New York"}
student = {"id": 1, "gpa": 3.8}
empty = {}
# Доступ по ключу
print(person["name"]) # John
print(person["age"]) # 30
print(student["id"]) # 1
# Безопасный доступ
print(person.get("country")) # None
print(person.get("country", "Unknown")) # Unknown
Ключевые различия
| Аспект | Список | Словарь |
|---|---|---|
| Структура | Упорядоченная коллекция | Пары ключ-значение |
| Индексация | По индексу (0, 1, 2...) | По ключу |
| Синтаксис | [1, 2, 3] | {"a": 1, "b": 2} |
| Изменяемость | Изменяемый (mutable) | Изменяемый (mutable) |
| Дубликаты | Допускаются элементы | Ключи уникальны |
| Тип ключей | N/A | Любой хешируемый тип |
Производительность
Поиск элемента
# Список — O(n)
numbers = [1, 2, 3, 4, 5]
if 3 in numbers: # Проходит по всем элементам
print("Found")
# Словарь — O(1)
user_ids = {"john": 101, "jane": 102, "bob": 103}
if "john" in user_ids: # Прямой доступ по хешу
print("Found")
Сравнение скорости
import timeit
# Список
test_list = list(range(1000))
print(timeit.timeit(lambda: 999 in test_list, number=100000))
# Результат: ~1.5 сек
# Словарь
test_dict = {i: i for i in range(1000)}
print(timeit.timeit(lambda: 999 in test_dict, number=100000))
# Результат: ~0.05 сек
Практические примеры
Когда использовать СПИСОК
# Очередь задач
tasks = ["task1", "task2", "task3"]
tasks.append("task4")
first_task = tasks.pop(0)
# Координаты
point = [10, 20, 30] # x, y, z
# Результаты поиска
results = ["user1", "user2", "user3"]
for i, user in enumerate(results):
print(f"{i+1}. {user}")
Когда использовать СЛОВАРЬ
# Данные пользователя
user = {
"id": 1,
"name": "John",
"email": "john@example.com",
"age": 30,
"is_active": True
}
# Кэш
cache = {"user_1": {"name": "John"}, "user_2": {"name": "Jane"}}
if user_id in cache:
return cache[user_id]
# Конфигурация
config = {
"database_url": "postgresql://localhost",
"api_key": "secret",
"timeout": 30,
"max_retries": 3
}
Преобразование между типами
# Список в словарь
pairs = [("a", 1), ("b", 2), ("c", 3)]
dict_from_list = dict(pairs)
print(dict_from_list) # {"a": 1, "b": 2, "c": 3}
# Словарь в список
my_dict = {"x": 10, "y": 20}
keys = list(my_dict.keys()) # ["x", "y"]
values = list(my_dict.values()) # [10, 20]
items = list(my_dict.items()) # [("x", 10), ("y", 20)]
# Dict comprehension
squares = {i: i**2 for i in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Методы работы
Список
data = [1, 2, 3]
data.append(4) # Добавить
data.extend([5, 6]) # Расширить
data.insert(0, 0) # Вставить в позицию
data.remove(2) # Удалить значение
data.pop() # Удалить последний
data.sort() # Отсортировать
data.reverse() # Развернуть
Словарь
data = {"a": 1, "b": 2}
data["c"] = 3 # Добавить ключ
del data["a"] # Удалить ключ
data.update({"d": 4}) # Объединить
data.pop("b") # Удалить и вернуть
data.clear() # Очистить