184 Глава 5 • Общие структуры данных Python
Это бывает полезно, если вам нужно вести учет не только того, при-
надлежит ли элемент множеству, но и того,
сколько раз он был включен
в множество:
>>> from
collections import Counter
>>> inventory = Counter()
>>> loot = {'клинок': 1, 'хлеб': 3}
>>> inventory.update(loot)
>>>
inventory
Counter({'клинок': 1, 'хлеб': 3})
>>> more_loot = {'клинок': 1, 'яблоко': 1}
>>> inventory.update(more_loot)
>>> inventory
Counter({'клинок': 2, 'хлеб': 3, 'яблоко': 1})
Приведу одно предостережение относительно класса
Counter
: следует со-
блюдать осторожность во время подсчета количества элементов в объекте
Counter
. В результате вызова функции
len()
возвращается количество
уникальных элементов в мультимножестве, тогда как общее количество
элементов может быть получено с использованием функции
sum
:
>>> len(inventory)
3
# Количество уникальных элементов
>>> sum(inventory.values())
6
# Общее количество элементов
Ключевые
выводы
Множество является еще одной полезной и широко используемой
структурой данных, включенной в Python и ее стандартную библио-
теку.
Используйте встроенный тип
set
, когда вы хотите получить изменя-
емое множество.
Объекты
frozenset
хешируемы и могут использоваться в качестве
словаря или ключей множества.
Класс
collections.Counter
реализует структуры данных «мультимно-
жество», или «мешок».
5 .5 . Стеки (с дисциплиной доступа LIFO)
185
5 .5 . Стеки (с дисциплиной доступа LIFO)
Стек представляет собой коллекцию объектов, которая поддерживает бы-
струю семантику доступа «
последним пришел — первым ушел» (
LIFO — last
in, first out) для вставок и удалений. В отличие от списков или множеств,
стеки, как правило, не допускают произвольного доступа к объектам,
которые они содержат. Операции вставки и удаления также нередко на-
зываются
вталкиванием (push) и
выталкиванием (pop).
Полезной аналогией для стековой структуры данных из реального мира
является
стопка тарелок:
Новые тарелки добавляются на вершину стопки . И поскольку тарелки
дорогие и тяжелые, можно взять только самую верхнюю тарелку (метод
«последним пришел — первым ушел») .
Чтобы добраться до тарелок,
которые находятся внизу стопки, необходимо поочередно удалить все
тарелки, которые находятся выше .
Стеки и очереди похожи. Обе эти структуры данных являются линей-
ными коллекциями элементов, и разница между ними состоит в порядке
доступа к элементам.
В случае с
Do'stlaringiz bilan baham: