Модуль collections на Python

Изучение и применение модуля collections в языке программирования Python. Структуры данных, предоставляемые модулем, установка и импорт. Особенности и преимущества модуля collections по сравнению с другими инструментами. Именованный кортеж named tuple.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.03.2024
Размер файла 65,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.Allbest.Ru/

Федеральное агентство по образованию

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Белгородский государственный технологический университет им. В.Г. Шухова»

Губкинский филиал

Курсовая работа

по дисциплине: «Основы программирования»

Тема:

Модуль 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}

sorted_pairs = OrderedDict(sorted(pairs.items(), key=lambda x: x[1]))

for key, value in sorted_pairs.items():

print(key, value)

Сортировка словаря по длине строки ключа (в порядке возрастания):

from collections import OrderedDict

def sort_dict_by_key_length(dictionary):

sorted_dict = OrderedDict(sorted(dictionary.items(), key=lambda x:

len(x[0])))

return sorted_dict

dictionary = {"applegak": 3, "banana": 5, "cherry": 6, "date": 4}

sorted_dictionary = sort_dict_by_key_length(dictionary)

print(sorted_dictionary)

1.5 Класс ChainMap

модуль collection python кортеж named tuple

Контейнер ChainMap в Python предоставляет удобный способ объединять несколько словарей в единый словарь.

ChainMap объединяет словари в цепочку, поэтому они отображаются как единый словарь. Одна из особенностей ChainMap заключается в том, что он сохраняет ссылки на исходные словари (или другие маппинги), а не создает новый словарь. Это означает, что изменения, внесенные в ChainMap, будут отражаться на исходных словарях.

Вы можете выполнять все операции, которые обычно выполняются со словарем, на ChainMap. Например, вы можете получать значения по ключу, добавлять новые элементы, обновлять значения существующих ключей и т.д.

Чтобы начать использовать цепную карту, мы должны сначала импортировать ее из модуля collections. [6]

from collections import ChainMap

A = {"pen": 15, "eraser": 22}

B = {"marker": 10}

chain = ChainMap(A, B)

print(chain)

После создания объекта ChainMap, вы можете обращаться к его элементам так же, как к обычному словарю. Вы можете использовать квадратные скобки [] и указывать ключ для доступа к значению, или вы можете использовать метод.get() для безопасного доступа к элементам ChainMap.

Важно помнить, что если один и тот же ключ присутствует в нескольких словарях, составляющих ChainMap, то будет возвращено первое вхождение ключа. Это определяется порядком, в котором словари были переданы при создании ChainMap.

from collections import ChainMap

A = {"pen": 15, "eraser": 22}

B = {"marker": 10, "eraser": 40}

chain = ChainMap(A, B)

print(chain["eraser"])

Добавление нового словаря в цепную карту

Поскольку внутри ChainMap используется список, вы можете использовать метод .maps.append() для добавления словаря в конце цепочки.

from collections import ChainMap

A = {"pen": 15, "eraser": 22}

B = {"marker": 10, "eraser": 40}

chain = ChainMap(A, B)

print(chain)

C = {"chart": 50}

chain.maps.append(C)

print(chain)

Чтобы добавить новый словарь в начало цепочки, используйте метод .new_child().

from collections import ChainMap

A = {"pen": 15, "eraser": 22}

B = {"marker": 10, "eraser": 40}

chain = ChainMap(A, B)

print(chain)

C = {"chart": 50}

chain = chain.new_child(C)

print(chain)

Операции мутации

Цепная карта поддерживает операции добавления, обновления и удаления пар ключ-значение. Однако, эти операции влияют только на первый словарь в цепной карте, даже если ключ присутствует в других словарях.

Итерация по цепной карте

Мы можем выполнять итерации по цепной карте, как по обычному словарю, используя метод .items()

from collections import ChainMap

A = {"pen": 15, "eraser": 22}

B = {"marker": 10, "eraser": 40}

chain = ChainMap(A, B)

for k, v in chain.items():

print(k, ":", v)

При встрече ключа более одного раза, то печатается только первое вхождение ключа. В нашем примере eraser встречается два раза, но печатается только первое вхождение

Мы также можем получить список ключей и значений, используя методы .keys() и .values().

from collections import ChainMap

A = {"pen": 15, "eraser": 22}

B = {"marker": 10, "eraser": 40}

chain = ChainMap(A, B)

keys = list(chain.keys())

values = list(chain.values())

print("Keys", keys)

print("Values", values)

1.6 Класс UserList

UserList является классом-оболочкой для объектов списка, который предоставляет удобный способ создания пользовательских списков с измененной или дополнительной функциональностью. Он действует как обертка вокруг обычного списка, и может использоваться для добавления нового поведения к списку.

UserList обеспечивает более гибкий подход к настройке функциональности списка. Он принимает экземпляр списка в качестве аргумента при создании экземпляра и эмулирует список, сохраненный внутри.

from collections import UserList

L = [1, 2, 3, 4]

# Creating a userlist

userL = UserList(L)

print(userL.data)

# Creating empty userlist

userL = UserList()

print(userL.data)

Польза UserLists

Предположим, вы хотите удвоить все элементы в определенных списках. Или, может быть, вы хотите убедиться, что ни один элемент не может быть удален из заданного списка. В таких случаях нам нужно добавить в наши списки определенное «поведение», что можно сделать с помощью UserLists. Давайте рассмотрим, как можно использовать UserList для переопределения функциональности встроенного метода. Приведенный ниже код предотвращает добавление нового значения в список:

# Создание списка пользователей, в котором добавление новых

элементов запрещено.

from collections import UserList

class user_list(UserList):

# функция, вызывающая ошибку при вставке

def append(self, s=None):

raise RuntimeError("Authority denied for new insertion")

my_list = user_list([11, 22, 33, 44])

# попытка вставить новый элемент

my_list.append(55)

Код выводит сообщение RunTimeError и не позволяет добавить элемент в список. Это может быть полезно, если вы хотите не допустить внесения информации после определенного срока.

1.7 Класс UserString

Класс UserString из модуля collections в Python действительно предоставляет возможность создания пользовательских объектов, подобных строкам. Он является оболочкой для объектов строки (string), которая разработана для упрощения создания подклассов строк.

Аналогично классам UserList и UserDict, создание подклассов встроенных неизменяемых типов, таких как str, может быть сложным из-за их особенной реализации и оптимизации. Класс UserString решает эту проблему, предоставляя удобный интерфейс и методы для работы с объектами типа str. Он позволяет создавать пользовательские подклассы строк с дополнительной функциональностью или измененным поведением.

Класс UserString предлагает более понятный для Python и предсказуемый способ реализации пользовательского строкового поведения. .[8]

UserString можно использовать для изменения строк или выполнения определенных функций.

Предположим, вы хотите удалить определенное слово из текстового файла (где бы оно ни было). Возможно, некоторые слова в тексте неуместны.

Давайте посмотрим на пример того, как UserString можно использовать для удаления определенных слов из строки.

print(fruits)

# Использование UserString для удаления определенных слов из

текстового файла from collections import UserString

class user_string(UserString):

def append(self, new):

self.data = self.data + new

def remove(self, s):

self.data = self.data.replace(s, "")

text = 'apple orange grapes bananas pencil strawberry watermelon eraser'

fruits = user_string(text)

for word in ['pencil', 'eraser']:

fruits.remove(word)

В этом примере pencil и eraser были удалены с помощью функционального класса user_string.

Также можно заменить слово другим во всем файле.

# используя UserString для замены имени или слова по всему тексту.

from collections import UserString

class user_string(UserString):

def append(self, new):

self.data = self.data + new

def replace(self, replace_text): self.data = self.data.replace(replace_text,

'The Chairman')

text = 'Rajesh concluded the meeting very late. Employees were

disappointed with Rajesh'

document = user_string(text)

document.replace('Rajesh')

print(document.data)

Слово Rajesh везде заменяется на The Chairman.

1.8 Класс UserDict

Класс UserDict из модуля collections в Python используется для создания подклассов словаря и позволяет улучшить или изменить его поведение по умолчанию. Вместо создания экземпляров словаря, этот класс создает подклассы словаря.

UserDict эмулирует словарь, предоставляя тот же интерфейс и методы, что и встроенный тип dict. Он делает исходный словарь доступным через атрибут .data, который хранит его содержимое. Это позволяет создавать пользовательские методы и поведение, которые могут получать доступ к базовым данным.

Давайте посмотрим, как определяется класс и как создать простой UserDict:

# Создание пользовательского указателя

from collections import UserDict

class Custom(UserDict):

pass

custom_dict = Custom({'Name': 'Nik', 'Age': 33})

print(custom_dict)

Если некоторые ключи имеют ненужные значения, и вам нужно заменить их на 0. Эту проблему можно решить следующим образом:

from collections import UserDict

class user_dict(UserDict):

def replace(self, key):

self[key] = '0'

file = user_dict({'red':5, 'white': 2, 'black': 1, 'blue': 4567890})

# Delete 'blue' and 'yellow'

for i in ['blue', ' red ']:

file.replace(i)

print(file)

Вот так, поле с ненужными значениями заменено на 0.

2. Особенности и преимущества модуля collections по сравнению с другими подобными инструментами

Модуль collections в Python предоставляет удобные структуры данных и алгоритмы, которые помогают решать различные задачи с минимальными усилиями. Вот некоторые особенности и преимущества модуля collections по сравнению с другими подобными инструментами:

1. Итерируемые и упорядоченные контейнеры: Модуль collections предлагает различные итерируемые контейнеры, такие как deque, defaultdict, OrderedDict и namedtuple, которые обеспечивают упорядоченность элементов и, таким образом, упрощают их обработку.

2. Дополнительные и специализированные контейнеры: Для решения специфических задач модуль collections предлагает контейнеры, такие как Counter для подсчета элементов, ChainMap для объединения словарей и UserDict, который предоставляет удобный интерфейс для создания пользовательских словарей.

3. Удобство и простота использования: Большинство классов из модуля collections имеют интуитивно понятный интерфейс и простые методы, что делает их использование и понимание более простыми по сравнению с другими инструментами.

4. Расширяемость и гибкость: Модуль collections позволяет создавать собственные подклассы с использованием уже предоставляемых классов. Это позволяет создавать контейнеры с уникальными свойствами и методами, обеспечивая гибкость и расширяемость.

5. Высокая производительность: Модуль collections оптимизирован для обеспечения высокой производительности. Например, класс deque предоставляет константное время вставки и удаления элементов из обоих концов контейнера и имеет преимущества в скорости по сравнению с использованием списка.

3. Перспективы развития модуля collections для Python

Модуль collections является частью стандартной библиотеки Python и предоставляет различные контейнерные типы данных, которые являются альтернативой стандартным встроенным типам данных, таким как списки и словари.

Перспективы развития модуля collections включают следующие аспекты:

1. Добавление новых типов данных: В будущем могут быть добавлены новые классы типов данных в модуль collections, чтобы предоставить разработчикам еще больше возможностей для работы с данными.

2. Улучшение производительности и эффективности: Модуль collections может быть оптимизирован для более эффективного использования памяти и более быстрого выполнения операций.

3. Введение новых функций и методов: Могут быть добавлены новые функции и методы для более удобного использования классов из модуля collections, что сделает код более читаемым и понятным.

4. Интеграция с другими модулями и библиотеками: Модуль collections может быть интегрирован с другими модулями и библиотеками, чтобы предоставить расширенные возможности и функциональность.

5. Развитие и поддержка: Модуль collections будет развиваться и поддерживаться сообществом разработчиков Python, что гарантирует его актуальность и соответствие современным требованиям.

В целом, перспективы развития модуля collections для Python обещают расширение его функциональности и улучшение производительности, что будет способствовать более эффективной разработке программ на языке Python.

Заключение

Исследование модуля collections в языке программирования Python позволило получить глубокое понимание его функций и возможностей. В результате работы становится ясно, что модуль collections является мощным инструментом, который помогает в работе с данными и упрощает решение широкого спектра задач. Он предоставляет удобные и эффективные структуры данных, которые повышают производительность и упрощают кодирование.

Список использованной литературы

В процессе подготовки курсовой работы были использованы разнообразные литературные источники, включая книги, статьи и онлайн-ресурсы, посвященные изучению модуля collections в языке программирования Python. Эти материалы предоставили фундаментальные знания о функционале модуля и его применении в реальных проектах. Ключевым ресурсом в процессе исследования стало официальное руководство Python, содержащее подробные описания методов и функций модуля collections.

Размещено на Allbest.Ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.