Python для начинающих
1.12K subscribers
347 photos
3 videos
232 files
64 links
Python для начинающих
Download Telegram
- Как запрограммировать простую очередь или стек с использованием deque из collections.
Привет! С вами Иван, и сегодня мы поговорим о том, как легко и просто реализовать структуру данных “очередь” и “стек” с помощью модуля collections, а точнее — с использованием класса deque. Если вдруг вы еще не знакомы с этим классом, самое время это исправить!

## Почему именно deque?

В Python списки (list) отлично подходят для многих задач, но если вы часто добавляете и убираете элементы с начала, производительность может заметно пострадать. К счастью, есть deque (double-ended queue)! Это двусторонняя очередь, которая реализована на основе связанного списка: вставка и удаление элементов с любого конца происходят за константное время.

## Реализуем очередь

Очередь — это структура данных, работающая по принципу FIFO (First-In, First-Out, “первым пришёл — первым ушёл”). Давайте посмотрим, как можно буквально в пару строк сделать простейшую очередь:

from collections import deque

queue = deque()

# Добавляем элементы в конец очереди
queue.append('apple')
queue.append('banana')
queue.append('cherry')

# Удаляем элемент из начала очереди
first = queue.popleft()
print(first) # apple


Здесь всё интуитивно ясно: append добавляет элемент в конец, а popleft вытаскивает первый элемент.

## А теперь стек

А вот стек — это LIFO (Last-In, First-Out, “последним пришёл — первым ушёл”). Реализуется он не менее просто:

from collections import deque

stack = deque()

# Добавляем элементы на вершину стека
stack.append('red')
stack.append('green')
stack.append('blue')

# Удаляем элемент с вершины стека
top = stack.pop()
print(top) # blue


Для стека используйте методы append и pop. Всё, больше ничего не нужно!

## Немного тонкостей

- deque можно использовать и как очередь, и как стек — просто используйте нужные методы: для очереди append и popleft, для стека — append и pop.
- Можно задавать максимальную длину очереди (maxlen), и тогда при переполнении старые элементы будут автоматически удаляться.
- deque поддерживает перебор циклом, а также методы, похожие на обычные списки: extend, remove, count и другие.

## Итого

Использовать стандартный модуль collections и класс deque — отличный способ писать лаконичный, быстрый и читаемый код для очередей и стеков. Основная прелесть — минимум кода и максимум эффективности, а всё самое “магическое” спрятано внутри самой стандартной библиотеки Python.

Экспериментируйте с deque — и почувствуйте разницу!
- Создание программы для учета расходов: работа с CSV и matplotlib.
Привет! Я — Иван, и сегодня мы напишем простую, но очень полезную программу: учёт расходов на Python. Вы удивитесь, как здорово совмещаются такие модули, как csv и matplotlib, чтобы автоматизировать ваши финансовые записи и даже видеть их на графике!

Первый шаг — научимся сохранять расходы в файле CSV. Это позволит работать с данными в удобном табличном виде.

import csv

def add_expense(category, amount):
with open('expenses.csv', 'a', newline='') as file:
writer = csv.writer(file)
writer.writerow([category, amount])

# Пример использования:
add_expense('Food', 520)
add_expense('Transport', 300)


Теперь, когда у нас есть таблица расходов, пора научиться их читать и анализировать. Допустим, мы хотим подбить итог по категориям и узнать, куда уходит основная часть бюджета.

def read_expenses():
expenses = {}
with open('expenses.csv', newline='') as file:
reader = csv.reader(file)
for row in reader:
category, amount = row
expenses[category] = expenses.get(category, 0) + float(amount)
return expenses

# Выведем сводку
expenses_summary = read_expenses()
for category, total in expenses_summary.items():
print(f"{category}: {total}")


А что если визуализировать эти данные? С этим справится всемогущий matplotlib. Построим круговую диаграмму расходов!

import matplotlib.pyplot as plt

def plot_expenses(expenses):
categories = list(expenses.keys())
amounts = list(expenses.values())
plt.pie(amounts, labels=categories, autopct='%1.1f%%')
plt.title('Expense Breakdown')
plt.show()

# Вызов функции для построения графика:
plot_expenses(expenses_summary)


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

Советую поэкспериментировать: добавить даты, поиск по месяцам, экспорт в другие форматы. Python + CSV + matplotlib — это мощный, гибкий и, главное, простой старт для любого, кто хочет автоматизировать свою бытовую жизнь!