Типы данных list, set и dict в языке Python

Раздел: Основы Python -> Типы коллекций

Основные типы коллекций: list, set, dict

Python предоставляет три основных встроенных типа для хранения коллекций: список (list), множество (set) и словарь (dict). Каждый из них имеет свои свойства, области применения и методы. Рассмотрим их подробно с примерами кода и разбором типичных ошибок.

Как создать список и добавить в него элементы?

Список - упорядоченная изменяемая коллекция, допускающая дубликаты. Основной способ создания - квадратные скобки или функция list().

fruits = ['apple', 'banana', 'cherry']
numbers = list((1, 2, 3))
print(fruits, numbers)

List set dict python (типы данных list, set, dict в python)

['apple', 'banana', 'cherry'] [1, 2, 3]

Добавление одного элемента выполняется методом append(), расширение другим списком - extend().

fruits.append('orange')
fruits.extend(['kiwi', 'mango'])
print(fruits)
['apple', 'banana', 'cherry', 'orange', 'kiwi', 'mango']

Какие существуют альтернативные способы создания списка?

Генератор списка (list comprehension) позволяет создавать списки на основе итерации:

squares = [x**2 for x in range(1, 6)]
print(squares)
[1, 4, 9, 16, 25]

Также можно использовать конструктор с любым итерируемым объектом, например, range() или строкой:

chars = list('hello')
print(chars)
['h', 'e', 'l', 'l', 'o']

Типичные ошибки при работе со списками

Изменение списка во время итерации (например, удаление элементов в цикле for) приводит к пропуску элементов. Решение - итерироваться по копии: for item in list_copy:.

my_list = [1, 2, 3, 4, 5]
for item in my_list[:]:   # копия
    if item % 2 == 0:
        my_list.remove(item)
print(my_list)
[1, 3, 5]

Как создать множество и обеспечить уникальность элементов?

Множество (set) - неупорядоченная коллекция уникальных элементов. Создаётся с помощью фигурных скобок или функции set().

colors = {'red', 'green', 'blue'}
unique_numbers = set([1, 2, 2, 3, 1])
print(colors, unique_numbers)
{'red', 'green', 'blue'} {1, 2, 3}

Как добавить или удалить элемент из множества?

Добавление - метод add(), удаление - remove() или discard() (без ошибки, если элемента нет).

colors.add('yellow')
colors.remove('red')
colors.discard('black')  # не возникнет ошибки
print(colors)
{'blue', 'green', 'yellow'}

Ошибка при удалении несуществующего элемента

Метод remove() вызывает KeyError, если элемента нет. Используйте discard(), если не уверены в наличии элемента.

Как создать словарь и получить значение по ключу?

Словарь (dict) - неупорядоченная (в Python 3.6+ упорядоченная) коллекция пар ключ-значение. Создаётся фигурными скобками с двоеточием или функцией dict().

person = {'name': 'Alice', 'age': 30, 'city': 'Moscow'}
print(person['name'])
Alice

Метод get() позволяет безопасно получить значение, вернув None (или значение по умолчанию) вместо ошибки.

print(person.get('salary', 0))
0

Какие есть способы создания словаря?

Из списка кортежей:

items = [('a', 1), ('b', 2)]
d = dict(items)
print(d)
{'a': 1, 'b': 2}

Генератор словаря:

squares = {x: x**2 for x in range(1, 5)}
print(squares)
{1: 1, 2: 4, 3: 9, 4: 16}

Ошибка при обращении к несуществующему ключу

Использование dict[key] для отсутствующего ключа вызывает KeyError. Всегда предпочтительнее использовать get() или проверять наличие через in.

Расширенные примеры работы с коллекциями

Многомерные списки (вложенные списки)

Создание матрицы 3x3 с использованием генератора:

Пример
matrix = [[i + j for j in range(3)] for i in range(3)]
print(matrix)
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]

Обращение к элементу: matrix[1][2] даст 3.

Операции над множествами

Объединение, пересечение, разность:

Пример
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print('union:', a | b)
print('intersection:', a & b)
print('difference a-b:', a - b)
print('symmetric diff:', a ^ b)
union: {1, 2, 3, 4, 5, 6}
intersection: {3, 4}
difference a-b: {1, 2}
symmetric diff: {1, 2, 5, 6}

Проверка подмножества: a.issubset(b) или a <= b.

Неизменяемое множество (frozenset)

Используется как ключ в словаре или элемент другого множества:

Пример
frozen = frozenset([1, 2, 3])
print(frozen)
# frozen.add(4)  # ошибка: AttributeError
frozenset({1, 2, 3})

Словарь с значениями по умолчанию (defaultdict)

Модуль collections.defaultdict упрощает работу с отсутствующими ключами:

Пример
from collections import defaultdict
word_count = defaultdict(int)
words = ['apple', 'banana', 'apple', 'cherry', 'banana', 'apple']
for w in words:
    word_count[w] += 1
print(dict(word_count))
{'apple': 3, 'banana': 2, 'cherry': 1}

Упорядоченный словарь (OrderedDict)

Хотя стандартный dict в Python 3.7+ сохраняет порядок вставки, OrderedDict предоставляет дополнительные методы, например, move_to_end():

Пример
from collections import OrderedDict
od = OrderedDict([('a', 1), ('b', 2)])
od.move_to_end('a')
print(od)
OrderedDict([('b', 2), ('a', 1)])

Преобразование между типами коллекций

Пример
my_list = [1, 2, 2, 3]
my_set = set(my_list)          # {1, 2, 3}
my_dict = dict.fromkeys(my_list, 0)  # {1:0, 2:0, 3:0}
print(my_set)
print(my_dict)
{1, 2, 3}
{1: 0, 2: 0, 3: 0}

Глубокое копирование изменяемых объектов

Поверхностная копия (copy()) не копирует вложенные объекты. Для полной независимости используйте deepcopy:

Пример
import copy
original = {'key': [1, 2, [3, 4]]}
shallow = original.copy()
deep = copy.deepcopy(original)
original['key'][2][0] = 99
print('original:', original)
print('shallow:', shallow)
print('deep:', deep)
original: {'key': [1, 2, [99, 4]]}
shallow: {'key': [1, 2, [99, 4]]}
deep: {'key': [1, 2, [3, 4]]}

Использование множества для удаления дубликатов из списка с сохранением порядка

Простое преобразование в set теряет порядок. Для сохранения порядка используйте цикл с проверкой:

Пример
items = [3, 1, 2, 1, 3, 4]
seen = set()
unique = []
for item in items:
    if item not in seen:
        seen.add(item)
        unique.append(item)
print(unique)
[3, 1, 2, 4]

Типы данных list, set, dict в Python - comments

En
List set dict python (python)