Федеральное агентство по образованию
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Белгородский государственный технологический университет им. В.Г. Шухова»
Губкинский филиал
Курсовая работа
по дисциплине: «Основы программирования»
Тема:
Модуль collections на Python
Выполнил: Яковлев М.Э.
студент группы ВТ-221
Проверил: доцент Титов А.И.
Губкин, 2023
Содержание
Введение
Знакомство с модулем collections в Python
Необходимость использования модуля collections
Установка и импорт модуля collections collections
Цель и задачи исследования
1. Основные типы данных в модуле collections
1.1 Именованный кортеж named tuple
1.2 Объект counter
1.3 Объект Defaultdict
1.4 Класс OrderedDict()
1.5 Класс ChainMap
1.6 Класс UserList
1.7 Класс UserString
1.8 Класс UserDict
2. Особенности и преимущества модуля collections по сравнению с другими подобными инструментами
3. Перспективы развития модуля collections для Python
Заключение
Список использованной литературы
Введение
Знакомство с модулем collections в Python
Collections - это модуль в языке программирования Python, который предоставляет полезные типы данных, которые называются контейнерами. Контейнерные типы данных позволяют нам удобно хранить и получать доступ к значениям. Обычно мы используем списки, кортежи и словари, но иногда требуются более сложные объекты для работы со структурированными данными. Модуль collections предоставляет именно такие умные объекты.
Необходимость использования модуля collections
Модуль collections может быть полезен в различных задачах, таких как подсчет значений, организация сбора данных и быстрая конвертация данных из файлов CSV и баз данных SQL. Часто разработчики и дата-сайентисты, которые начинают использовать этот модуль, удивляются тому, как они раньше справлялись без него. [2]
Установка и импорт модуля collections collections
Модуль collections входит в стандартную библиотеку Python, поэтому нет необходимости устанавливать его отдельно. Для использования достаточно выполнить операцию импорта: «import collections»
После импорта можно использовать все функции и переменные, предоставляемые этим модулем в рамках программы.
Цель и задачи исследования
Целью данной курсовой работы является изучение возможностей и применение модуля collections в Python.
Задачи исследования включают в себя:
1. Изучить документацию по модулю collections.
2. Изучить основные структуры данных, предоставляемые модулем collections, такие как namedtuple, deque, defaultdict, Counter и OrderedDict.
3. Показать примеры использования каждой из структур данных.
4. Описать возможные перспективы развития модуль collections
Данное исследование предоставит понимание того, как эффективно использовать модуль collections при разработке приложений на Python, а также как решать разнообразные задачи, используя модуль collections
1. Основные типы данных в модуле collections
1.1 Именованный кортеж namedtuple
Namedtuple представляет собой расширенную версию обычного кортежа (tuple) или быстрый способ создания класса с определенными именованными атрибутами.
Основное различие между кортежем и именованным кортежем заключается в том, что кортеж позволяет обращаться к данным по индексам, тогда как именованный кортеж позволяет получить доступ к элементам напрямую по их именам.
На самом деле, вы можете определить, какие атрибуты может содержать именованный кортеж, и создавать несколько экземпляров с этими атрибутами. Это позволяет удобно хранить и обрабатывать структурированные данные, например, записи из таблицы базы данных или результаты из CSV-файлов, без необходимости создания отдельного класса.
Таким образом, с точки зрения функциональности он больше похож на класс, хотя и называется кортежем.
from collections import namedtuple
book = namedtuple ('book', ['tiraze', 'colichestvo_stranic', 'avtor'])
harry potter = book ('500', '367', 'JK ROWLING')
pride and prejudice = book ('300', '200', 'jane_austen')
tale = book('199', '250', 'christie')
print('Tiraze of pride and prejudice is ', pride_and_prejudice.tiraze)
print('Avtor of harry potter is', harry_potter.avtor) print(tale[1])
Одно из главных преимуществ использования именованных кортежей (namedtuple) вместо словарей заключается в их эффективности по использованию памяти. Именованные кортежи обычно занимают меньше места в памяти по сравнению с аналогичными словарями.
Это особенно полезно, когда имеется дело с большими объемами данных, так как более эффективное использование памяти может улучшить производительность и сократить нагрузку на систему.
Кроме того, именованные кортежи также предоставляют удобный и интуитивно понятный способ доступа к данным по их именам, что делает код более читабельным и позволяет избежать ошибок, связанных с опечатками или неправильным обращением к атрибутам.
Таким образом, использование именованных кортежей может быть очень полезным при работе с большими объемами данных, где эффективность использования памяти имеет значение.
Создание namedtuple из словаря в Python
Чтобы создать namedtuple из словаря в Python, вам потребуется определить структуру namedtuple, указав имена полей. Затем, вы можете передать словарь в качестве аргумента при создании экземпляра именованного кортежа. Важно отметить, что ключи словаря должны точно соответствовать именам полей, которые вы задали для namedtuple. Если ключи не совпадают, будет вызвано исключение.
Для удобства преобразования словаря в именованный кортеж вы можете использовать синтаксис (**dict), который позволяет передавать все элементы словаря в виде именованных аргументов.
Таким образом, вы можете легко создавать именованные кортежи из словарей, что может быть удобно при обработке данных и работе с различными структурами.
# Преобразовать словарь в namedtuple from collections import
namedtuple dictionary = dict({'price': 567, 'no_of_pages': 878, 'author':
'cathy thomas'})
# Преобразованиеbook = namedtuple ('book', ['price', 'no_of_pages',
'author'])print(book(**dictionary))
Замена атрибута в именованном кортеже
Если вам необходимо изменить значение одного атрибута в именованном кортеже, вы можете воспользоваться методом replace (). Этот метод создает новый экземпляр именованного кортежа с обновленным значением указанного атрибута. [3]
from collections import namedtuple
book = namedtuple('book', ['tiraze', 'colichestvo_stranic', 'avtor'])
harry_potter = book('500', '367', 'JK ROWLING')
pride_and_prejudice = book('300', '200', 'jane_austen')
tale = book('199', '250', 'christie')
pride_and_prejudice = pride_and_prejudice._replace(tiraze=500)
print(' Tiraze of pride and prejudice is', pride_and_prejudice.tiraze)
print(' Avtor of harry potter is', harry_potter.avtor)
print(tale[1])
1.2 Объект counter
Класс Counter() из модуля collections в Python предоставляет удобный инструмент для подсчета элементов коллекции. Он позволяет подсчитывать хеш-объекты, такие как строки, числа, кортежи и другие неизменяемые типы данных.
Counter() представляет собой подкласс словаря (dict), где элементы коллекции являются ключами, а их счетчики хранятся в виде значений словаря. Это позволяет легко подсчитывать количество вхождений каждого элемента.
Для создания объекта Counter() вы можете передать ему итерируемый объект, такой как список или строка.
Класс Counter() представляет мощный инструмент для подсчета элементов и учета их количества в коллекциях, что делает его полезным при обработке данных и анализе.
Давайте используем счетчик counter, чтобы найти частоту вхождений каждого символа в строке.
from collections import Counter
# счетчик со строками
string = 'lalalaland'
string_count = Counter(string)
print(string_count)
Как мы видим, counter позволяет посмотреть, какие элементы есть в строке и сколько их.
Как посмотреть количество слов в предложении при помощи функции split()
Если у вас есть предложение и вы хотите подсчитать количество слов в нем, вы можете использовать функцию split() для разделения предложения на отдельные слова и передать полученный список в объект Counter().
from collections import Counter
# Использование счетчика в предложениях
line = "он не сказал ей, что ее презентация была не настолько хороша"
list_of_words = line.split()
line_count = Counter(list_of_words)
print(line_count)
Как найти наиболее частотные элементы с помощью метод most_common()
Счетчик (Counter) действительно является мощным инструментом при работе с большими наборами данных и анализе частотности элементов.
Когда у вас есть большие объемы данных, может быть сложно вручную отследить и подсчитать количество каждого элемента. Вот где класс Counter становится особенно полезным.
С помощью класса Counter вы можете легко подсчитывать частотность элементов и получать наиболее часто встречающиеся элементы в наборе данных.
from collections import Counter
sales = Counter('alckghgilglg')
sales.most_common()
print(Counter(sales).most_common(1))
Метод Counter().elements()
Еще один метод Counter().elements(), позволяющий возвращать все элементы, количество которых больше 0.
from collections import Counter
sales = Counter('alckghgilglg')
sales.elements()
print(sorted(sales.elements()))
1.3 Объект Defaultdict
Словарь в Python представляет собой структуру данных, которая хранит неупорядоченные пары ключей и значений. Ключи словаря должны быть уникальными и неизменяемыми объектами, такими как строки, числа или кортежи. Значения в словаре могут быть любого типа данных, включая списки.
Список (List) является изменяемым объектом, поэтому он не может быть использован в качестве ключа словаря. Если вы попытаетесь использовать список в качестве ключа, возникнет ошибка TypeError.
Однако, кортеж является неизменяемым объектом, поэтому он может быть использован в качестве ключа словаря.
Отличие defaultdict от простого словаря
Если вы попытаетесь получить доступ к ключу, которого нет в словаре, он выдаст ошибку KeyError. В то время как при использовании defaultdict такой ошибки не будет.
Если вы попробуете обратиться к отсутствующему ключу, defaultdict просто вернет значение по умолчанию.
Синтаксис будет следующим: defaultdict(default_factory).
При обращении к отсутствующему ключу функция default_factory вернет значение по умолчанию.
Если вы хотите вывести сообщение о том, что значение запрошенного ключа отсутствует, можно определить собственную функцию и передать ее в defaultdict. К примеру, это может выглядеть так:
# Передача функции для возврата значения по умолчанию
from collections import defaultdict
def print_default():
return 'value absent'
def_dict = defaultdict(print_default)
print(def_dict['chocolate'])
# Вывод:
# value absent
Вы также можете обойти ошибку KeyError и при использовании обычного словаря - с помощью метода get().
# Заставить dict возвращать значение по умолчанию
mydict = {'a': 'Apple', 'b': 'Ball'}
print(mydict.get('c', 'NOT PRESENT'))
# Вывод:
# NOT PRESENT
1.4 Класс OrderedDict()
Функция OrderedDict() из модуля collections возвращает экземпляр словаря, который является подклассом обычного словаря dict, но с дополнительными методами для управления порядком элементов.
Основное отличие между обычным словарем и упорядоченным словарем (OrderedDict) заключается в том, что упорядоченный словарь запоминает порядок вставки элементов. Это означает, что порядок элементов будет соответствовать порядку, в котором они были добавлены в словарь.
Важно отметить, что начиная с Python версии 3.7, словари типа dict также запоминают порядок вставки элементов. Поэтому использование упорядоченных словарей может быть менее важным, если вы работаете с более новыми версиями Python.
Однако, упорядоченные словари (OrderedDict) по-прежнему могут быть полезными, особенно если вам нужно гарантировать определенный порядок элементов или если вы работаете с более старыми версиями Python, где обычные словари не запоминают порядок вставки.
# Создайте OrderedDict и распечатайте элементы
from collections import OrderedDict
ordered_vehicle = OrderedDict()
ordered_vehicle['bicycle'] = 'hercules'
ordered_vehicle['car'] = 'Maruti'
ordered_vehicle['bike'] = 'Harley'
print('This is an ordered dict')
for key, value in ordered_vehicle.items():
print(key, value)
Сортировка с помощью OrderedDict
Сортировка элементов словаря может быть очень полезной при анализе данных. Сортировка позволяет упорядочивать элементы словаря в определенном порядке.
Сортировка элементов по ключу KEY (в порядке возрастания):
from collections import OrderedDict
diction = {"Book": (1, 2), "Armchair": (2, 2), "Lamp": (1, 3)}
diction_list = list(diction.items())
diction = OrderedDict(sorted(diction_list, key=lambda x: (-x[1][1], x[0])))
print(diction)
Сортировка пар по значению VALUE (в порядке возрастания):
from collections import OrderedDict
pairs = {'Apple': 5, 'Banana': 2, 'Orange': 8, 'Grape': 3}