seniorpy | Unsorted

Telegram-канал seniorpy - Senior Python Developer

44765

Публикуем интересные/полезные фичи/библиотеки языка. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorpy

Subscribe to a channel

Senior Python Developer

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

Условия:
Бинарное дерево поиска (BST) - это дерево, в котором каждый узел имеет не более двух детей, и для каждого узла его левое поддерево содержит только узлы с ключами, меньшими чем ключ узла, а правое поддерево - только узлы с ключами, большими чем ключ узла.
k всегда валидно и находится в пределах количества узлов в дереве.

Объяснение:
Функция kthSmallest принимает корень бинарного дерева и число k.
Вложенная функция inorder реализует обход дерева в порядке "лево-корень-право", что гарантирует получение элементов в порядке возрастания.
Рекурсивный вызов inorder собирает значения узлов в список.
Функция возвращает k-1 элемент этого списка, так как индексация в Python начинается с нуля.


Этот вопрос проверяет знания кандидата в области алгоритмов обхода дерева, рекурсии и понимания структур данных, таких как бинарные деревья поиска.

Читать полностью…

Senior Python Developer

Переводим текст с английского на русский язык и преобразуем его в голосовое сообщение

Для перевода текста с английского на русский и преобразования его в голосовое сообщение, вы можете использовать библиотеки googletrans для перевода и gTTS (Google Text-to-Speech) для синтеза речи.

pip install googletrans==4.0.0-rc1
pip install gtts

Читать полностью…

Senior Python Developer

NetworkX

NetworkX — это библиотека Python для анализа сложных сетей. Она предоставляет структуры данных для работы с графами (сетями) и реализует множество алгоритмов для анализа и визуализации сетевых данных.

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

#для_продвинутых

Читать полностью…

Senior Python Developer

Думаете о карьере в сфере IT — начните с Python. Этот язык рекомендуют в качестве первого языка программирования, и для начала обучения вам не понадобятся технические знания и навыки.

Запишитесь на бесплатный курс Нетологии «Основы Python: создаём телеграм-бота». Программа акцентирована на практике. За 5 занятий вы погрузитесь в логику и синтаксис языка, изучите основные инструменты для написания кода. С нуля разработаете планировщик задач и создадите полезного Telegram-бота, которым сможет пользоваться кто угодно.

Попробуйте

Реклама. ООО “Нетология“. Erid LatgBdNsp

Читать полностью…

Senior Python Developer

Хочешь пройти путь от Джуна до Мидла и повысить зарплату и навыки?

Приходи на бесплатный Тестовый урок — оценку твоих знаний проведёт опытный Python-разработчик.

Мы дадим максимум пользы за 40 минут. Что нужно сделать?

1) Запишись на бесплатный тестовый урок в боте
2) Реши задание (даже если раньше никогда ничего не кодил)
3) Получи обратную связь
4) Построй траекторию обучения и спланируй своё развитие в IT на ближайший год
5) В обучение включена реальная стажировка!

Записаться на Тестовый урок можно в боте после прохождения небольшого опроса, он займёт 1 минуту.

Реклама. ООО «ДЕВМАН»
ИНН: 5001149108.
ОГРН: 1225000116131.
erid: 2SDnjd2v8mv

Читать полностью…

Senior Python Developer

Быстрый офер в Яндекс для бэкенд-разработчиков

Мечтали о возможности самим выбрать команду, в которой будете работать? Приходите в Яндекс за офером! На мероприятии по быстрому найму через MultiTrack 27–28 января можно получить приглашение за два дня, несколько недель поработать в трёх разных командах, а затем выбрать проект, с которым свяжете будущее.

План простой: до 24 января решите задачи в Контесте, 27 января пройдите две технические секции, а 28-го получите офер и знакомьтесь с командами. Мы ждём бэкендеров на C++, Python, Java и Go, которые занимаются коммерческой разработкой больше пяти лет.

Регистрируйтесь и приходите!

Читать полностью…

Senior Python Developer

Объясните, что делает данная функция (первая картинка), оптимизируйте ее, и напишите тесты для проверки ее корректности.

Что делает функция:

Данная функция some_function принимает список чисел input_list, проходится по каждому элементу в списке, проверяет, является ли элемент четным числом, и если да, то добавляет квадрат этого числа в новый список result. В конце функция возвращает этот новый список.

Оптимизация кода:
Мы можем использовать list comprehension для более компактной записи этой функции:

def optimized_function(input_list):
return [item ** 2 for item in input_list if item % 2 == 0]


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

def general_function(iterable):
return (item ** 2 for item in iterable if item % 2 == 0)


Тестирование:
Теперь напишем тесты для проверки корректности функции. Мы можем использовать библиотеку unittest для этого (вторая картинка).
#вопросы_с_собеседований

Читать полностью…

Senior Python Developer

Напишите функцию, которая принимает на вход список словарей, представляющих собой записи о студентах. Каждый словарь содержит ключи 'name', 'age' и 'grade'. Функция должна возвращать средний возраст студентов и среднюю оценку. Напишите код и объясните, как бы вы обработали случаи, когда в словарях отсутствуют ключи или значения не являются числами.

Объяснение:
В этой функции мы проходим по списку словарей, проверяем наличие ключей 'name', 'age' и 'grade' и их типы. Если данные валидны, добавляем их к общей сумме, чтобы затем посчитать средние значения.

Читать полностью…

Senior Python Developer

#вопросы_с_собеседований
Напишите функцию, которая принимает на вход строку и возвращает количество уникальных слов в этой строке. Считайте, что слова разделяются пробелами, знаками препинания должны быть удалены. Напишите код и расскажите, как вы обрабатываете знаки препинания. Какие дополнительные оптимизации можно внести?


Объяснение:
В этом коде (первая картинка) мы используем string.punctuation для определения знаков препинания и str.translate() для удаления их из строки. Затем мы приводим всю строку к нижнему регистру и разбиваем ее на слова, считая количество уникальных слов с использованием множества (set).

Оптимизации (вторая картинка):
Мы могли бы использовать регулярные выражения для более точного удаления знаков препинания и разделения слов. Вместо создания промежуточного списка words, мы могли бы сразу подсчитывать уникальные слова при проходе по строке, что сэкономило бы память.

Читать полностью…

Senior Python Developer

memoryview()

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

memoryview() также может использоваться для работы с массивами и другими объектами, поддерживающими буферный интерфейс в Python.

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

#для_начинающих

Читать полностью…

Senior Python Developer

#вопросы_с_собеседований
Реализуйте алгоритм поиска в ширину (BFS - Breadth-First Search) для графа на Python. Напишите код и объясните, как работает этот алгоритм. Обсудите его сложность и применение.

Объяснение:

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

Шаги алгоритма:
1. Создается пустое множество visited для отслеживания посещенных вершин и очередь queue для управления порядком обхода.
2. Стартовая вершина добавляется в очередь и отмечается как посещенная.
3. Пока очередь не пуста, извлекается вершина из начала очереди (queue.popleft()).
4. Выводится значение текущей вершины и добавляются в очередь все её смежные вершины, которые еще не были посещены.
5. Шаги 3-4 повторяются до тех пор, пока очередь не опустеет.

Сложность:
Временная сложность: O(V + E), где V — количество вершин, E — количество ребер в графе.
Пространственная сложность: O(V), так как используется множество для отслеживания посещенных вершин.

Применение:
BFS применяется в задачах поиска кратчайших путей в невзвешенных графах.
Он также используется в задачах, связанных с обходом графов, например, в нахождении компонент связности.

Читать полностью…

Senior Python Developer

⚠️ Как Data Scientists дойти до уровня Middle+?

Совершенствовать мастерство ML в сообществе единомышленников!

Пройдите тест и проверьте, насколько вы готовы к обучению на продвинутом курсе «Machine Learning. Advanced» от OTUS.

🧑‍💻 В программе продвинутые ML-алгоритмы, RL, графы, временные ряды, рекомендательные системы, а также работа в production: настройка окружения, оптимизация кода, построение end-to-end пайплайнов и внедрение решений

⚠️ Вебинары в формате Live coding, где преподаватель с «чистого листа» показывает решение актуальных задач ML.

🔥  Ответьте на 20 вопросов, получите велкам-скидку и доступ к 2 предстоящим открытым урокам:

✔️ Ранжирование каталога товаров
✔️ Рекомендательные системы на основе матричных разложений

 ➡️ https://otus.pw/Hmqx/?erid=LjN8KRUSx

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

Senior Python Developer

❗️Как развиваться Python-разработчику?
 
Наращивать объем знаний и навыков. За этим приходите на вебинар, приуроченный к старту онлайн-курса «Python Developer. Professional» в OTUS.

✅ На вебинаре речь, конечно же, пойдет про SOLID, о котором так любят спрашивать на собеседованиях.

🔹Мы пройдемся по каждой букве в отдельности с примерами кода и описанием, не забыв про актуальность и применимость в мире Python разработки

Встречаемся 10 января в 20:00 мск, занятие будет приурочено к старту курса «Python Developer. Professional».

👉 ПРОЙТИ ТЕСТ для регистрации на открытый урок
https://otus.pw/P18F/?erid=LjN8K7LSg

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

Senior Python Developer

Пишем приложение на Python для подготовки к собеседованиям по Python

На конец 2023 года язык программирования Python является самым популярным по индексу TIOBE.

Смотреть статью

Читать полностью…

Senior Python Developer

Метод math.perm()

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

Синтаксис:

math.perm(n, k)


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

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

#для_начинающих

Читать полностью…

Senior Python Developer

⚠️  Снижение размерности в ML – что это такое и как с этим работать?

Расскажет Мария Тихонова – Senior Data Scientist в «SberDevices» и преподаватель ВШЭ. Встречаемся на бесплатном практическом уроке «Метод главных компонент для снижения размерности» от OTUS.

• На занятии вы узнаете основные подходы к задаче снижения размерности в ML

• Изучите метод главных компонент для снижения размерности и научитесь применять алгоритм PCA на практике.

Встречаемся 22 января в 18:00 мск в рамках курса «Machine Learning. Professional».

Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить список вопросов и ответов для прохождения интервью

👉Регистрация
https://otus.pw/PCd7/?erid=LjN8K7STP

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

Senior Python Developer

Начните изучать Python без лишних рисков.

Записывайтесь на 14-дневный подготовительный курс по Python-разработке.🐍

Всего 990 ₽ и ваши карьерные перспективы станут яснее.

Более 70 уроков, практические задания, помощь наставника, а как итог – собственная программа и четкое понимание, в правильном ли IT-направлении вы двигаетесь.

Начинаем 23 января, регистрируйтесь уже сейчас!

Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid:LjN8KTFVF

Читать полностью…

Senior Python Developer

Как получить размер папки с помощью Python?

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

Другие способы решить данную задачу можно найти здесь.

Читать полностью…

Senior Python Developer

У вас есть список словарей, представляющих информацию о книгах. Каждый словарь содержит поля «название» (title), «автор» (author) и «год выпуска» (year). Напишите функцию на Python, которая принимает такой список книг и возвращает словарь, в котором ключами являются года выпуска, а значениями — списки книг, выпущенных в этот год. Книги в каждом списке должны быть упорядочены по алфавиту по названию.

Решение:

1. Используем defaultdict(list), чтобы автоматически создавать пустой список для каждого года.
2. Книги сортируем по названию перед группировкой, чтобы списки книг в каждом году были упорядочены по алфавиту.
3. Проходим по отсортированным книгам и добавляем их в соответствующие списки годов в словаре.

#вопросы_с_собеседований

Читать полностью…

Senior Python Developer

Объясните, что такое обработка исключений в Python, и предоставьте пример кода, демонстрирующий использование блока try-except.

Обработка исключений в Python позволяет программисту обрабатывать и управлять ошибками в коде. Блок try содержит код, который может вызвать исключение. Если исключение происходит, выполнение кода переходит к блоку except, который содержит обработчики конкретных типов исключений.
Блок else выполняется, если в блоке try не возникло исключение.
Блок finally выполняется всегда, независимо от того, произошло исключение или нет. Этот блок используется, например, для освобождения ресурсов.

В примере на картинке в функции divide_numbers представлен пример деления двух чисел с использованием блока try-except. В случае деления на ноль выводится сообщение об ошибке. Если переданы нечисловые значения, программа сообщает об ошибке типа. В блоке else выводится сообщение об успешном выполнении операции, а в блоке finally выводится сообщение, которое всегда выполняется.

Читать полностью…

Senior Python Developer

💻 Определяем ip адрес своего компьютера

Этот код использует библиотеку requests для отправки HTTP-запроса к веб-сервису ipify, который предоставляет API для определения публичного IP-адреса пользователя. Код написан в форме функции get_public_ip, что делает его удобным для повторного использования.

Использование блока try-except обеспечивает обработку исключений, которые могут возникнуть при запросе (например, проблемы с подключением к интернету). Если запрос успешен, функция возвращает IP-адрес, иначе возвращает сообщение об ошибке.

Читать полностью…

Senior Python Developer

Как парсить данные сторонних сайтов без проблем? Крутим прокси

Если вы занимались сбором данных во «внешнем мире», то знаете, как этот мир жесток. Парсер сторонних сайтов может спокойно наткнуться на блокировки, задержки и другие проблемы, которые замедляют работу или вообще делают парсинг невозможным.

Ребята из финтех-компании Точка сделали свой инструмент, который помогает избежать лимитов по IP и капчи — единый кастомный прокси-сервер со своей логикой ротации. О том, как это делали и как работает инструмент, читайте на Хабре.

Что ещё внутри:

— Как не получились отдельные Python-модули.
— Что такое MITM (этакий хакерский вид атаки) и зачем он тут нужен.
— Схемы запросов и параметры прокси-сервера.

Читать

Читать полностью…

Senior Python Developer

pow()

В Python функция pow() используется для вычисления степени числа. Вот как она работает:

result = pow(x, y, z)


где: x — основание степени,
y — показатель степени,
z (необязательный параметр) — модуль, по которому производится вычисление.
Если z указан, то pow(x, y, z) возвращает (x y) % z. Если z не указан, то возвращается x y.

#для_начинающих

Читать полностью…

Senior Python Developer

🐍 Не просто сложно, а очень сложно... пройти хардкорный тест по Python от OTUS.

Ответьте на 20 вопросов и проверьте, насколько вы готовы к обучению на продвинутом курсе  «Python Developer. Professional» от OTUS.

🔹На обучении вас ждет продвинутые темы и практика на «боевых» задачах уровня Middle+

🔹Проектная работа, которой можно показать свой уровень на собеседовании

Овладейте лучшими практиками и навыками Python для уверенного карьерного роста 

✔️  Проверьте формат обучение на открытом уроке 23 января — FastAPI в действии: быстрое создание API для веб-приложений

 👉 Пройти тест 
https://otus.pw/Ovqi/?erid=LjN8KCpPW

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

Senior Python Developer

Метод __getitem__

Метод __getitem__ является частью протокола индексации, который позволяет объекту быть индексируемым, как это делается, например, для списков или словарей. Этот метод вызывается при использовании квадратных скобок [] для доступа к элементам объекта.

Этот метод также используется при работе с срезами. Если вы хотите, чтобы ваш объект поддерживал срезы, вы также можете реализовать метод __getitem__ с тремя аргументами: self, start, stop.

#для_начинающих

Читать полностью…

Senior Python Developer

frozenset

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

Вот несколько ключевых особенностей frozenset:

Неизменяемость: Это означает, что вы не можете добавлять, удалять или изменять элементы в frozenset после его создания.
Хешируемость: Поскольку frozenset неизменяем, он является хешируемым, что означает, что его можно использовать в качестве ключа в словарях и элемента множества.

Обратите внимание, что, поскольку frozenset не поддерживает изменения, некоторые методы, которые изменяют множество (например, add, remove, discard), не применимы к frozenset. Однако, вы можете выполнять операции, возвращающие новые frozenset, такие как объединение и пересечение.

#для_начинающих

Читать полностью…

Senior Python Developer

Ruff

Ruff — это новый, быстроразвивающийся линтер Python кода, призванный заменить flake8 и isort.

Основным преимуществом Ruff является его скорость. Ruff в 10-100 раз быстрее аналогов (Линтер написан на Rust). В сравнении с flake8, автор заявляет о практически полном совпадении с набором правил инструмента и нативной реализацией популярных плагинов (flake8-bugbear и т.д.). Также Ruff совместим с Black «из коробки».

Ruff может форматировать код. Например, он автоматически удаляет неиспользуемые импорты. Что касается сортировки и группировки строк импорта, то она практически идентична isort.

Читать полностью…

Senior Python Developer

Реализуйте алгоритм сортировки слиянием (Merge Sort) на Python. Напишите код и объясните, как работает этот алгоритм. Расскажите о его сложности и возможных оптимизациях.

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

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

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

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

Читать полностью…

Senior Python Developer

Метод swapcase()

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

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

#для_начинающих

Читать полностью…

Senior Python Developer

Сцепление исключений

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

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

#для_продвинутых

Читать полностью…
Subscribe to a channel