Python вопросы с собеседований
19.7K subscribers
316 photos
4 videos
16 files
258 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит
Download Telegram
🖥 Как преобразовать строчное значение в список?

Есть строка: expr_str = "[1, 2, 3, 4]"
Как эту строку можно преобразовать в список?

Вот, аж целых четыре способа
🟡Вариант 1

from ast import literal_eval

res = literal_eval(expr_str)


🟡Вариант 2

import json

res = json.loads(expr_str)


🟡Вариант 3

import yaml

res = yaml.safe_load(expr_str)


🟡Вариант 4

res = [int(i) for i in re.findall('\d+', expr_str)]


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Задача о дубликатах в списке

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

🟡Движение по списку с использованием двух указателей

def remove_duplicates(first):
if not first:
return

nextone = first

while nextone:
runner = nextone
while runner.next:
if runner.next.val == nextone.val:
runner.next = runner.next.next
else:
runner = runner.next
nextone = nextone.next

return first

Функция remove_duplicates принимает на вход один аргумент first, в который мы передаем начало списка.

Далее создаем переменную nextone, которая инициализируется значением first. nextone используем для перемещения по списку, она указывает на текущий элемент. То есть эта переменная является первым указателем. Переменная runner — второй указатель.


🟡Метод с использованием хеш-таблицы

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

def remove_duplicates(list_head):
if not list_head:
return

seen = set()
current = list_head
prev = None

while current:
if current.val in seen:
prev.next = current.next
else:
seen.add(current.val)
prev = current
current = current.next

return list_head

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

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

Подробнее

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Проверка на верное количество парных скобок [{()}]

▶️Популярная задача с собеседований: написать код для проверки, верно ли расставлены скобки в выражении (для каждой открывающей должна быть закрывающая скобка).
Как можно написать этот код?

▶️Оптимальным решением будет использование стека и постоянное удаление элементов в нем, если скобки открывающаяся и закрывающаяся совпадают, то они очищаются из стека и так до тех пор, пока он не окажется пустым:
def check(string):
brackets_open = ('(', '[', '{', '<')
brackets_closed = (')', ']', '}', '>')
stack = []
for i in string:
if i in brackets_open:
stack.append(i)
if i in brackets_closed:
if len(stack) == 0:
return False
index = brackets_closed.index(i)
open_bracket = brackets_open[index]
if stack[-1] == open_bracket:
stack = stack[:-1]
else: return False
return (not stack)


Проверяем, как работает:
str1 = '[{([[[<>]]])(<>)(){}}]' 
str2 = ']()(){<>}[[()]]'

print(check(str1)) #True
print(check(str2)) #False


🟡Ну а если хочется вызвать особые чувства у собеседующего — используйте Regex (второе изображение)

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 В чем разница между итератором и генератором?

В
Python и итераторы, и генераторы позволяют перебирать элементы коллекций, но работают немного по-разному.

🔘Итераторы — это объекты, которые реализуют методы __iter__() и __next__(). Метод __iter__() возвращает сам итератор, а __next__() — следующий элемент коллекции. Если элементы заканчиваются, __next__() должен вызвать исключение StopIteration. Итераторы позволяют явно перебирать элементы коллекции, не требуя, чтобы все элементы были доступны в памяти одновременно.

🔘Генераторы — это специальный способ реализации итераторов. Они создаются при помощи функций с ключевым словом yield. Главное отличие генератора заключается в том, что значения генерируются по требованию. Каждый раз, когда генератор достигает yield, он возвращает значение и «замирает», сохраняя своё состояние до следующего вызова. Это позволяет использовать меньше памяти при итерации по длинным последовательностям.

#вопросы_с_собеседований
Please open Telegram to view this post
VIEW IN TELEGRAM
🔎 С помощью каких инструментов можно выполнить статический анализ кода?

Для статического анализа кода есть несколько инструментов:

Pylint - это инструмент, который анализирует исходный код на соответствие PEP8, а также предупреждает о потенциальных ошибках в коде.

Flake8 - это комбинированный инструмент, который объединяет в себе Pylint, PyFlakes и множество других правил, обеспечивающих соответствие стиля написания кода и обнаруживающих ошибки в исходном коде.

Mypy - это статический типизатор для Python, который позволяет находить ошибки в типах переменных в исходном коде.

Bandit - это инструмент для поиска уязвимостей в исходном коде Python.

Black - это инструмент для автоматического форматирования кода Python, который придерживается только одного стиля написания кода.

Pycodestyle — это простая консольная утилита для анализа кода Python, а именно для проверки кода на соответствие PEP8. Один из старейших анализаторов кода, до 2016 года носил название pep8, но был переименован по просьбе создателя языка Python Гвидо ван Россума.

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

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

Пишите в комментариях, какие инструменты анализа кода используете вы 👇

@python_job_interview
🖥 Как упаковать бинарные зависимости?

Для упаковки бинарных зависимостей в проект следует использовать менеджеры пакетов. Для Python наиболее распространены pip и conda. Для Java - Maven или Gradle.

Пример для Python с использованием pip:

Установите необходимые библиотеки и зависимости в проекте:
pip install requests numpy pandas
Создайте файл requirements.txt с полным списком зависимостей:

requests
numpy
pandas


Упакуйте зависимости в архив:
pip freeze > requirements.txt
Можно передать файл requirements.txt другим пользователям вашего проекта, которые могут установить все зависимости одной командой:

pip install -r requirements.txt

Для упаковки бинарных зависимостей можно использовать инструмент wheel. Wheel-файлы - это zip-архивы, содержащие установочные файлы для Python-пакетов, и могут содержать бинарные расширения (например, скомпилированные модули C), которые необходимо собрать и установить на целевой машине.

Для создания wheel-файла для Python-пакета можно использовать команду pip wheel. Например, если есть файл с требованиями requirements.txt, содержащий список зависимостей вашего проекта, можете создать wheel-файлы для всех зависимостей с помощью следующей команды:

pip wheel -r requirements.txt

Вы также можете установить wheel-файлы с помощью pip install, указав имя файла:

pip install mypackage-1.0.0-py3-none-any.whl
Таким образом, вы можете создавать и распространять бинарные зависимости в виде wheel-файлов и использовать их при установке пакетов на других устройствах.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Поиск значений в словаре неизвестной глубины

Периодически на собеседованиях попадаются задачи с похожей формулировкой.

🟡Перебрать весь словарь неизвестной глубины и содержимого, включающие в себя вложенные словари, можно с помощью рекурсии. Для этого подойдет функция такого вида (кстати, здесь используются аннотации типов):
def find_all_keys(input_dict: dict) -> list:
result = []
for key, val in input_dict.items():
if key.startswith('description'):
result.append(val)
if isinstance(val, dict):
result.extend(find_all_keys(val))
return result

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

🟡Для запуска поиска нужно создать переменную под массив с результатам и вызвать созданную функцию, передав ей исходный словарь:
data = yaml.safe_load(Path(sys.argv[1]).read_text())
descriptions = find_all_keys(data)


Ну вот, теперь на одну проблемную задачу меньше)

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Вопросы для собеседования Python Junior

Держите большой список из 98 вопросов по Python и немного по смежным штукам типо Git, SQL.

Вопросы есть простые и не очень, вот некоторые из них:
• Чем файл .pyc отличается от .py
• Что такое GIL
• Будет ли возвращать что-то функция без return?
• Что такое миксины
• Сколько может быть родителей и наследников у класса
• Что такое json, xml
• Какой паттерн программирования реализует Django
• Что такое JOIN и какой он может быть
• Метаклассы в Python

📎 Вопросы и ответы

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Python: вопросы и ответы с собеседований

Держите 36 вопросов с ответами по Python + вопросы по Computer Science, Django, по базам данных и не только.
Успешных собеседований)

▶️ Вопросы/ответы

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
⭐️ Data Science разбор реальной задачи с собеседования. Прогнозирование оттока клиентов.

Смотреть
Данные
Ноутбук

@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Большой список вопросов и ответов по Python для подготовки к собеседованию

Эти вопросы покрывают практически все темы Python + затрагивают азы Computer Science: алгоритмы, структуры данных и т.д.

▶️ Вопросы и ответы

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 10 вопросов по Python от Epam

Вопросы в духе "что такое замыкание", "расскажи про CPython", локальные/глобальные переменные, блокировщик GIL, CPU-bound- и IO-bound-задачи

▶️ Вопросы и ответы

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM