← Назад к вопросам

В чем разница между списком и словарем?

1.3 Junior🔥 241 комментариев
#Python Core

Комментарии (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()             # Очистить
В чем разница между списком и словарем? | PrepBro