Senior Python Developer
41.2K subscribers
2.22K photos
5 videos
1 file
552 links
№ 4931117861
Публикуем интересные/полезные фичи/библиотеки языка.

По вопросам сотрудничества: @adv_and_pr

Канал на бирже:
https://telega.in/c/seniorpy
Download Telegram
Реализуйте алгоритм сортировки слиянием (Merge Sort) на Python. Напишите код и объясните, как работает этот алгоритм. Расскажите о его сложности и возможных оптимизациях.

Объяснение:
Алгоритм сортировки слиянием (Merge Sort) использует стратегию «разделяй и властвуй». Он состоит из двух основных шагов:

Разделение (Divide): Массив разделяется на две равные (при четном числе элементов) или почти равные (при нечетном) части. Этот процесс рекурсивно выполняется для каждой из подпоследовательностей.
Слияние (Merge): Отсортированные подпоследовательности сливаются обратно в один отсортированный массив.

Сложность:
Временная сложность: O(n log n) в худшем, лучшем и среднем случаях.
Пространственная сложность: O(n).

Оптимизации:
— При реализации можно использовать вставочную сортировку для маленьких подмассивов, так как у нее меньшая константа в асимптотике.
— Если массив уже отсортирован, можно добавить проверку и пропустить шаг сортировки.
— Вместо копирования подмассивов при каждом рекурсивном вызове можно использовать вспомогательный массив для слияния, что уменьшит использование памяти.
Метод swapcase()

Метод swapcase() в Python является встроенным методом строк (str), который создает новую строку, меняя регистр каждой буквы в исходной строке. Если буква была в верхнем регистре, она будет преобразована в нижний регистр, и наоборот.

Результатом будет строка 'hELLO, wORLD!'.

#для_начинающих
Только начинаете в разработке на Python, рабочее окружение собирается на глаз, а проект сложно воспроизвести у коллег?

На открытом уроке разберём, как настроить удобное и предсказуемое окружение для Python-проекта — от структуры приложения до инфраструктуры. Покажем архитектуру типового проекта, разберём, какие компоненты нужны для разработки и как собрать локальную среду, которая повторяет рабочую. 

Отдельно рассмотрим сборку Docker-контейнеров и развёртывание в Kubernetes, чтобы вы понимали полный цикл жизни приложения. Вы увидите, как выстроить процесс так, чтобы код работал одинаково у вас, в команде и в рабочей среде. Это базовый навык, без которого невозможно уверенно расти в разработке.

👉 Открытый урок проходит в преддверии старта курса «Python-разработчик» 7 мая в 20:00 МСК. Регистрация: https://otus.pw/eBRf/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Метод math.perm()

Метод math.perm() в Python возвращает количество способов выбрать k элементов из n элементов с порядком и без повторения.

Синтаксис:
math.perm(n, k)


Где:
n: Количество элементов из которых выбираются k элементов.
k: Количество элементов, которые выбираются.

В первом примере метод возвращает количество способов выбрать 3 элемента из 5 элементов. В результате получается 60 способов.
Во втором примере метод возвращает количество способов выбрать 5 элементов из 10 элементов. В результате получается 252 способа.

#для_начинающих
Сцепление исключений

Сцепление исключений (exception chaining) позволяет сохранять информацию об исключении, которое произошло во вложенном блоке кода, в исключении более высокого уровня. Это полезно для отслеживания причин ошибок и обеспечения более полной информации о том, что произошло.

В примере на картинке, если возникает ZeroDivisionError, мы попадаем в блок except, а затем выполняем вложенный код, который вызывает ValueError. С помощью ключевого слова from мы указываем, что исключение ValueError является следствием (частью) исключения ZeroDivisionError. Таким образом, информация об исключении ZeroDivisionError сохраняется.

#для_продвинутых
Функция tell()

Функция tell() используется для получения текущей позиции указателя в потоке данных. Она применяется чаще всего при работе с файлами, но также может использоваться с другими типами потоков, например, сокетами или консольным вводом.

Возвращаемое значение: целое число, указывающее положение указателя в байтах от начала потока.
Аргументы: tell() не принимает никаких аргументов.

#для_начинающих
Сокращение ссылок прямо в коде

Иногда возникает необходимость сделать ссылку более короткой. Для этого пригодится библиотека pyshorteners — с помощью трех строк кода и сервиса tinyurl она позволяет быстро создать короткую ссылку.
Что нам стоит диаграмму в Python построить: 5 вариантов привлекающей внимание визуализации данных и кое-что ещё

Диаграммы помогают визуализировать как простые, так и самые сложные наборы данных. При этом диаграмм — множество видов, у каждого есть свои достоинства и недостатки. О наиболее эффектных и эффективных, реализуемых с Python, мы решили рассказать в сегодняшней подборке.

Смотреть статью
В чем разница между is() и == в Python?

Операторы is и == в Python выполняют похожие функции, но работают немного по-разному. И если вы новичок, используете сравнения в коде, стоит понимать разницу. Это поможет реже прибегать к рефакторингу и дебагу.

Смотреть статью
Узнаем сколько свободной памяти на компьютере

Для того, чтобы узнать сколько свободной памяти доступно на компьютере с помощью Python можно использовать модуль psutil.

Метод virtual_memory() возвращает объект с информацией о памяти системы. Свойство available объекта содержит количество свободной памяти в байтах.
Ищем опечатки

Пакет spellchecker позволяет отыскать ошибки в тексте, а также может предложить варианты исправлений. В примере проходимся по списку из двух слов, из которых одно ('therre') написано с опечаткой. Функция correction замечает это и предлагает одно самое вероятное исправление, а candidates — несколько.

Пакет поддерживает шесть языков.

Документацию можно найти здесь.
Извлекаем имя из адреса электронной почты

Для извлечения имени из адреса электронной почты до символа ‘@‘ можно использовать регулярные выражения.

Это регулярное выражение начинает поиск с начала строки с помощью символа "^" и находит любую комбинацию строчных букв, цифр, дефисов, подчеркиваний, точек и знака минуса. Затем выражение находит символ "@" и останавливается.
cv3 — делаем OpenCV питоничным

cv3 - обёртка над opencv-python, которая ускоряет написание кода, не сужая функциональность

Смотреть статью
Узнаем сколько раз встречается каждая буква в предложении

Код представлен на картинке.
Cравнение 2 аудиосообщений

Для сравнения двух аудиосообщений в Python нужно использовать библиотеку для анализа звука, например, librosa или PyAudio.

Здесь мы загружаем два файла и вычисляем их характеристики MFCC (Mel Frequency Cepstral Coefficients), которые представляют собой набор коэффициентов, описывающих звуковое пространство. Затем мы вычисляем расстояние между характеристиками с помощью функции dtln из librosa.core. Результат будет выведен в консоль.

Обратите внимание, что для сравнения аудиосообщений нужно, чтобы они имели одинаковую продолжительность и были записаны в одинаковых условиях (например, громкость, обработка шума).
Удаляем файл из папки на компьютере

Для удаления файла из папки на ПК в Python можно использовать модуль os.

Здесь сначала мы импортируем модуль os. Затем указываем полный путь к удаляемому файлу в переменной file_path. С помощью функции os.path.exists() проверяем, существует ли файл по указанному пути.

Если файл существует, мы удаляем его с помощью функции os.remove(). В противном случае выводим информацию, что такой файл не найден.
argparse

Библиотека argparse является стандартным инструментом для обработки аргументов командной строки в Python. Она позволяет легко определить и обработать аргументы, передаваемые программе при запуске из командной строки.

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

Иногда возникает необходимость остановить выполнение программы, чтобы можно было выполнить несколько других операций, или просто из-за требуемой утилиты. В такой ситуации может пригодиться функция sleep(), которая обеспечивает точный и гибкий способ остановки потока кода на любой период времени.

В нашем примере время начала и время окончания будут напечатаны с задержкой в ​​6 секунд.
⚠️ Модель работает, но её сложно поддерживать: этапы обработки данных разрознены, обучение нестабильно, результат трудно воспроизвести. Без единого контура управления такие решения быстро теряют ценность.

1 июня в 18:00 МСК приглашаем вас на открытый урок курса «Машинное обучение. Продвинутый уровень».

🦾 На занятии вы разберёте, как с помощью Pipeline объединить подготовку данных, обучение и проверку модели в единую цепочку. Поймёте, как строить составные решения с промежуточными этапами и управлять ими без хаоса. Покажем, как это работает на практике и как применять в реальных задачах.

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

➡️ Зарегистрируйтесь, чтобы научиться выстраивать устойчивые решения в машинном обучении: https://otus.pw/igEZ/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
hYPerSonic

hYPerSonic – это фреймворк на языках Python и C. Используется для разработки и эксплуатации конвейеров обработки звука, предназначенных для управления в реальном времени. Эта структура является низкоуровневой, в которой подсчитывается каждый байт, и это также включает объекты для звуковой карты, фильтрует операции с памятью, file – io и осцилляторы. Эта структура работает в операционных системах Linux и OSX.

https://github.com/lwcook/hypersonic-simulation
Разбиваем видео на n кол-во изображений

Для разбиения видео на n количество изображений вам понадобится использовать библиотеку OpenCV в Python.

В этом примере функция video_to_images принимает путь к видео (`video_path`) и количество желаемых изображений (`frames_count`). Она открывает видеофайл, читает каждый кадр и сохраняет каждый "шаг" кадров как отдельное изображение. Затем функция прекращает обработку, когда необходимое количество изображений сохранено.

Обратите внимание, что код использует целочисленное деление // и целочисленное преобразование int() для обеспечения, чтобы каждое изображение было сохранено через примерно одинаковое количество кадров, чтобы равномерно распределить их по времени видео.