УДК 004.423
Информационные технологии
Халевин Тимофей Анатольевич, студент направления подготовки информатика и вычислительная техника, Хакасский государственный
университет имени Н.Ф. Катанова, г. Абакан, Россия Голубничий Артем Александрович, научный руководитель, старший преподаватель кафедры ПОВТиАС, Хакасский государственный университет
имени Н.Ф. Катанова, г. Абакан, Россия
МОДУЛЬ COLLECTIONS В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ PYTHON.
COUNTER И ORDEREDDICT
Аннотация: В статье рассматриваются контейнерные типы данных Counter и OrderedDict модуля collection языка программирования Python.
Ключевые слова: Python, collections, типы данных, Counter, OrderedDict.
Annotation: This article discusses the container data types Counter and OrderedDict of the collection module of the Python programming language.
Keywords: Python, collections, data types, Counter, OrderedDict.
Большинство решений в современных языках программирования созданы для того, чтобы упростить жизнь программисту своим функционалом. Модуль collections в языке Python реализует специализированные контейнерные типы данных, обеспечивающие альтернативы встроенным контейнерам общего назначения, таким как diet, list, set и tuple [1].
В модуле collections языка программирования python встречаются 9 типов данных: namedtuple, deque. ChainMap, Counter, OrderedDict, defaultdict, UserDict, UserList и UserString. В данной статье подробно будут рассмотрены Counter и OrderedDict.
Тип данных Counter - это функция, для создания подклассов словарей с
подсчетом элементов. Этот тип данных идентичен словарю, но также имеет дополнительные методы, которые будут разобраны далее.
Разберем пример работы с Counter, представленный на рисунке 1.
Рисунок 1 - Пример работы с Counter
Для начала импортируем Counter из модуля collections. После создадим строку, которая будет хранить предложение «Counter - функция модуля collections языка программирования Python».
Предположим, что необходимо узнать сколько раз каждая буква встречается в предложении. Пробелы в строке нам не нужны, поэтому избавляемся от них с помощью метода replace (pattern, value, count), где pattern - это строка, которую мы хотим изменить на value. Количество изменений определяются параметром count, который по стандарту равен -1, что означает замену всех встреченных паттернов.
Теперь вызываем Counter(string), где аргументом будет наша строка. На выходе получаем аналог словаря где ключом будут являться символы, а значением их количество в строке.
Также есть возможность итерироваться по данному типу данных как по словарю. Пример итерации представлен на рисунке 2.
»> >>>
cnt = Counter('тест 1}
ioi key, value in cnt.items (} :
Frir.t(f' Сикеол {key) встречается в строке (valueJ раз1}
Сиквсл т встречается в строке 2 paz Сиквсл е встречается в строке 1 раз Сиквсл с встречается в строке 1 paz
Рисунок 2 - Итерация по Counter
Так же у Counter есть методы, рассмотрим их на рисунке 3.
Рисунок 3 - Методы Counter
Метод elements() возвращает объект со всеми элементами Counter. Для получения элементов, например, в виде списка, необходимо обернуть метод в list().
Метод most_common(n) в качестве аргумента принимает число и возвращает n самых часто встречаемых элементов.
Вычитание двух объектов Counter cnt - sb, оставляет только элементы ключи которых остались положительными после вычитания.
Сложение двух объектов Counter cnt + sb, складывает значения двух ключей.
Пересечение двух объектов Counter cnt & sb, выбирает минимальное
значение из двух.
Сравнение двух объектов Counter cnt == sb, возвращает True если объекты идентичны, иначе False.
Добавление знака + перед объектом типа Counter возвращает все элементы, значения которых положительны.
Добавление знака - перед объектом типа Counter возвращает элементы, значения которых отрицательны. Но при этой операции значения элементов на выводе изменятся на положительные, это важно учитывать
Так же мы можем получить значение элемента через обращение по ключу. Если элемента с переданным ключом нет, то мы получим нулевое значение.
Теперь перейдем к такому типу данных как OrderedDict. OrderedDict возвращает экземпляр подкласса diet, который имеет методы, специализированные для изменения порядка словаря [2].
На рисунке 4 представлены методы добавления в OrderedDict элементов.
>>> fror. collections inport OrderedDict
>>> od = OrderedDict. froir.keys (1 example 1 , value =1}
>>> od
OrderedDict ([ ['e1 , 1}, ['к1, 1}, fa\ 1}, [У, 1), {'p1, 1}, ['1', 1)1) »> od [1 f1 ] =1
>>> od
OrderedDict([{'е', 1}, ['к1, 1}, fa', 1}, {■ ш\ 1), ('p', 1}, ('1', 1}, ('f\ 1)]>
Рисунок 4 - Методы добавления элементов в OrderedDict
OrderedDict имеет дополнительные методы для работы со словарем. Начнем с метода для получения элемента из словаря. Метод popitem(last=True) возвращает последний элемент словаря. Аргумент last является булевым и означает откуда возьмется элемент словаря, из начала при ложном аргументе или конца при истинном аргументе. На рисунке 5 представлено выполнение данного метода.
>>> od.popiteir. (l£st= e ) ('f1, 1)
>>> od
OideiedDictlK'e1, 1), l)p ('a', 1), ('m\ 1) , {'p', 1}, {'1', 1)])
>>> od.popiteni(l£st= ilse) ['£', 1)
>>> od
OideiedDict U("x", 1), ('a', 1), ("m1^ 1) , ('p', 1), ['1', 1)]) Рисунок 5 - Выполнение метода popitem
Так же мы можем изменять порядок элементов в словаре с помощью метода move_to_end(element, last=True). Данный метод принимает два аргумента: элемент словаря и булево значение last которое отвечает за то, куда будет перемещен элемент, в конец словаря при истинном значении или в начало при ложном. На рисунке 6 представлено выполнение данного метода.
>>> od.move_tc_end(1х')
>>> od
OrderedDict ( [ ( 1 а 1 , 1), ('т\ 1), ['р', 1), {•!•, 1), ('х', Л_ > ] > >>> od.move_t.c_end ( 'm' , lsst =
>>> od
OrderedDicc([('m', 1}, ('a', 1}, {'p', 1}, ['1', 1}, ('x', 1)])
Рисунок 6 - Выполнение метода move_to_end
Есть возможность так же итерироваться по OrderedDict как по словарю, а также можно итерироваться в обратном порядке. Пример итерирования по OrderedDict в обратном порядке представлен на рисунке 7.
Рисунок 7 - Итерирование в обратном порядке по OrderedDict
Заключение
Подводя итоги можно сказать, что Counter модуля collection предоставляет возможность для подсчета элементов в итерируемом объекте.
Это позволяет сократить время для решения некоторых задач. OrderedDict модуля collection представляет собой расширение обычного словаря в языке Python и может пригодиться для специализированных задач в которых важен порядок.
Библиографический список:
1. Бэрри П. Изучаем программирование на Python [Текст] / П. Бэрри. -М.: Вильямс, 2014. - 243 с.
2. Гэддис Т. Начинаем программировать на Python [Текст] / Т. Гэддис. - СПб.: БХВ-Петербург, 2021. - 768 с.