words = ["Авто", "Велосипед", "Самолет"]
И такая строка:
st = "Быстрый автомобиль"
Нужно вернуть
True
, т.к. в строке есть слово "авто"
из списка.def is_part_in_list(st, words):
for word in words:
if word.lower() in st.lower():
return True
return False
print(is_part_in_list(st, words))
print(any(word.lower() in st.lower() for word in words))
print(any(map(text.lower().__contains__, map(st.lower, words))))
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Для проверки утечки памяти в Linux можно использовать утилиту Valgrind.
Она предназначена для отладки программ, написанных на C, C++ и других языках, и позволяет обнаруживать утечки памяти, ошибки использования указателей и другие проблемы.
Для использования Valgrind в Python необходимо установить пакет memcheck-3.4.1 (или более новую версию) и запустить интерпретатор Python с помощью утилиты Valgrind. Например:
valgrind --tool=memcheck --leak-check=yes python myscript.py
Это запустит скрипт myscript.py под управлением Valgrind и выведет отчет о возможных утечках памяти и других проблемах.
Также можно использовать модуль Python tracemalloc, который позволяет отслеживать использование памяти в Python и выводить отладочную информацию. Пример использования:
import tracemalloc
tracemalloc.start() # начало трассировки памяти
# ваш код
snapshot = tracemalloc.take_snapshot() # текущее состояние памяти
top_stats = snapshot.statistics('lineno')
print("[ Top 10 ]")
for stat in top_stats[:10]:
print(stat)
Это выведет топ-10 участков кода с наибольшим использованием памяти. Однако, обратите внимание, что использование tracemalloc может снизить производительность программы и требует дополнительной обработки кода.
@linuxacademiya
Please open Telegram to view this post
VIEW IN TELEGRAM
expr_str = "[1, 2, 3, 4]"
Как эту строку можно преобразовать в список?
Вот, аж целых четыре способа
from ast import literal_eval
res = literal_eval(expr_str)
import json
res = json.loads(expr_str)
import yaml
res = yaml.safe_load(expr_str)
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
@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
Для статического анализа кода есть несколько инструментов:
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
Держите большой список из 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
Держите 36 вопросов с ответами по Python + вопросы по Computer Science, Django, по базам данных и не только.
Успешных собеседований)
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Machine learning Interview
▪Смотреть
▪Данные
▪Ноутбук
@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Эти вопросы покрывают практически все темы 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