Forwarded from Python/ django
В статье описаны такие структуры данных как:
— Массив (Array)
— Динамический массив (Dynamic array)
— Связный список (Linked list)
— Стек (Stack)
— Очередь (Queue)
— Множество (Set)
— Карта (Map)
— Двоичное дерево поиска (Binary search tree)
— Префиксное дерево (Trie)
— Граф (Graph)
Параллельно рассказывается про самые популярные алгоритмы и ещё много всего)
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Крутейшая подборка для Дата Саентиста. Лучшие бесплатные курсы, книга, разбор вопросов с собеседований, roadmap, полезные материалы по Python, Go, Linux и многое другое.
▪100 вопросов для подготовки к собесу Data Science
▪Видео
▪100 вопросов для подготовки к собесу Python
▪Вопросы Middle
▪Видео
▪Вливаемся в Data Science: подробный roadmap что и где изучать
▪Machine Learning инженер: что/где/как изучать, чтобы въехать
▪ Моя большая практическая шпаргалка SQL (SQLite) с готовыми запросами
▪ Шпаргалка для алгособеса — алгоритмическая сложность, структуры данных, методы сортировки и Дейкстра
▪ Шпаргалка для алгособеса 2 — графовые и строковые алгоритмы
▪40 Полезных инструментов Дата Саентиста
▪Go — 100 вопросов/заданий с собеседований
▪Видео
▪ Где изучать Linux в 2024. Бесплатные курсы, книги и ресурсы
▪Видео
▪ Бесплатные курсы для изучения искусственного интеллекта в 2024 году
▪NumPy: оттачивайте навыки Data Science на практике
▪Numpy полный бесплатный курс
▪Где изучать Python в 2024. Бесплатные курсы, книги и ресурсы
▪ Видео
▪Где искать работу Дата Саентисту в 2024 году
▪Ресурсы для поиска работы Python разработчикам
▪ Бесплатные курсы по большим языковым моделям для дата-сайентистов
@python_job_interview
▪100 вопросов для подготовки к собесу Data Science
▪Видео
▪100 вопросов для подготовки к собесу Python
▪Вопросы Middle
▪Видео
▪Вливаемся в Data Science: подробный roadmap что и где изучать
▪Machine Learning инженер: что/где/как изучать, чтобы въехать
▪ Моя большая практическая шпаргалка SQL (SQLite) с готовыми запросами
▪ Шпаргалка для алгособеса — алгоритмическая сложность, структуры данных, методы сортировки и Дейкстра
▪ Шпаргалка для алгособеса 2 — графовые и строковые алгоритмы
▪40 Полезных инструментов Дата Саентиста
▪Go — 100 вопросов/заданий с собеседований
▪Видео
▪ Где изучать Linux в 2024. Бесплатные курсы, книги и ресурсы
▪Видео
▪ Бесплатные курсы для изучения искусственного интеллекта в 2024 году
▪NumPy: оттачивайте навыки Data Science на практике
▪Numpy полный бесплатный курс
▪Где изучать Python в 2024. Бесплатные курсы, книги и ресурсы
▪ Видео
▪Где искать работу Дата Саентисту в 2024 году
▪Ресурсы для поиска работы Python разработчикам
▪ Бесплатные курсы по большим языковым моделям для дата-сайентистов
@python_job_interview
Подсчет узлов бинарного дерева
Сложность: Средняя
Условие задачи: Дан корень дерева, удовлетворяющего термину "полнота", надо посчитать количество узлов в дереве.
Полным дерево считается в случае, если на каждом уровне (возможно за исключением последнего) у каждого родителя имеется пара потомков.
Необходимо разработать алгоритм с временной сложностью менее O(n).
Пример:
Ввод:
Вывод: 6
Объяснение: *во вложении
▪Подробнее про двоичное дерево
▪Решение
Пишите свое решение в комментариях👇
@python_job_interview
Сложность: Средняя
Условие задачи: Дан корень дерева, удовлетворяющего термину "полнота", надо посчитать количество узлов в дереве.
Полным дерево считается в случае, если на каждом уровне (возможно за исключением последнего) у каждого родителя имеется пара потомков.
Необходимо разработать алгоритм с временной сложностью менее O(n).
Пример:
Ввод:
root = [1,2,3,4,5,6]
Вывод: 6
Объяснение: *во вложении
▪Подробнее про двоичное дерево
▪Решение
Пишите свое решение в комментариях👇
@python_job_interview
🚀 Перестановки, зависящие от регистра символа
Сложность: Средняя
Условие задачи: Дана строка, содержащая как цифры, так и буквы. Необходимо вернуть всевозможные варианты перестановок строки, изменяя регистр букв.
Пример:
Ввод: s = "a1b2"
Вывод: ["a1b2","a1B2","A1b2","A1B2"]
Ввод: s = "3z4"
Вывод: ["3z4","3Z4"]
🔗 Решение
Пишите свое решение в комментариях👇
@python_job_interview
Сложность: Средняя
Условие задачи: Дана строка, содержащая как цифры, так и буквы. Необходимо вернуть всевозможные варианты перестановок строки, изменяя регистр букв.
Пример:
Ввод: s = "a1b2"
Вывод: ["a1b2","a1B2","A1b2","A1B2"]
Ввод: s = "3z4"
Вывод: ["3z4","3Z4"]
🔗 Решение
Пишите свое решение в комментариях👇
@python_job_interview
Сложность: Средняя
Условие задачи: Дано бинарное дерево, нужно перенести каждый указатель на следующий узел на соответствующий правый правый элемент на текущем уровне либо же передать указатель на NULL в случае отсутствия узла.
Пример:
Ввод:
root = [1,2,3,4,5,null,7
]Вывод:
[1,#,2,3,#,4,5,7,#]
📌 РешениеПишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Вот некоторые обсуждаемые вещи:
• создание списков при помощи list comprehensions
• об использовании глобальных переменных
• генераторы,
yield
и вот это всё• функция
enumerate
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Затронута большая часть того, что пригодится в реальной работе, а именно:
— Создание словаря
— Длина словаря
— Доступ к элементам словаря
— Добавление элементов в словарь
— Изменение элементов в словаре
— Проверка ключей в словаре
— Удаление пары ключ-значение из словаря
— Преобразование словаря в список элементов
— Очистка словаря
— Удаление словаря
— Копирование словаря
— Получение ключей словаря в виде списка
— Получение значений словаря в виде списка
— Создайте пустой словарь с именем
dog
.— Добавьте в словарь
dog
ключи "name"
, "color"
, "breed"
, "legs"
и "age"
.— Создайте словарь
student
и добавьте ключи "first_name"
, "last_name"
, "gender"
, "age"
, "marital status"
, "skills"
, "country"
, "city"
и "address"
.— Получите длину словаря
student
.— Получите значение ключа
"skills"
и проверьте его тип данных, он должен быть списком.— Измените значения ключа
"skills"
, добавив одну или две навыка.— Получите ключи словаря в виде списка.
— Получите значения словаря в виде списка.
— Преобразуйте словарь в список кортежей с помощью метода
items()
.— Удалите один из элементов из словаря.
— Удалите один из словарей полностью.
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Также в видео затрагиваются такие темы как:
— генераторы
— тернарный оператор
— множество
set()
— вложенные циклы
и много других, особенно актуальных для начинающих вещей
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
DRY - это принцип разработки, который означает "Don't Repeat Yourself" (не повторяйся). В контексте программирования, DRY означает, что любой фрагмент кода должен иметь только один источник истины, и он должен быть легко доступен и изменяем. Это уменьшает количество дублирующегося кода и упрощает процесс сопровождения и изменения кода.
Через ООП или ФП, можно применять принцип DRY следующим образом:
ООП: используйте наследование, полиморфизм и абстракцию для организации кода. Вынесите общие методы и свойства в родительские классы, а для каждого подкласса определите только те функции, которые отличают его от других.
ФП: используйте функции высшего порядка, замыкания и лямбда-выражения. Выносите общие функции в модули или библиотеки, и переиспользуйте их при необходимости.
Вот пример того, как ООП можно использовать для применения принципов DRY:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"My name is {self.name} and I am {self.age} years old.")
class Student(Person):
def __init__(self, name, age, major):
super().__init__(name, age)
self.major = major
def introduce(self):
super().introduce()
print(f"I am majoring in {self.major}.")
class Teacher(Person):
def __init__(self, name, age, department):
super().__init__(name, age)
self.department = department
def introduce(self):
super().introduce()
print(f"I teach in the {self.department} department.")
Класс Person содержит общие атрибуты и поведение для всех людей в системе. Классы Student и Teacher наследуют от Person и добавляют свои определенные атрибуты и поведение. Таким образом, мы избегаем дублирования кода таких атрибутов, как имя и возраст, или таких методов, как внедрение.
Используя ООП и наследование, мы можем эффективно применять принципы DRY и сделать код более удобным в сопровождении и расширяемым. Точно так же вы можете использовать функции и композицию более высокого порядка в FP для достижения тех же целей.
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Множественное наследование - это когда класс наследуется от нескольких базовых классов. Это означает, что класс-потомок получает свойства и методы от всех своих базовых классов.
Пример использования множественного наследования в Python:
class A:
def method_a(self):
print("Method A")
class B:
def method_b(self):
print("Method B")
class C(A, B):
def method_c(self):
print("Method C")
obj_c = C()
obj_c.method_a() # Output: Method A
obj_c.method_b() # Output: Method B
obj_c.method_c() # Output: Method C
В этом примере классы A и B являются базовыми классами для класса C. Класс C получает свойства и методы от классов A и B, и может использовать их в своих собственных методах.
Множественное наследование может быть полезно, когда вам нужно использовать свойства и методы из разных классов, чтобы создать новый класс с уникальным поведением. Однако, когда используется множественное наследование, может возникать проблема "алмазного наследования", когда два базовых класса оба имеют одноименный метод, что может привести к неоднозначности и ошибкам в коде.
Если такая проблема возникает, то рекомендуется пользоваться композицией вместо множественного наследования.
Композиция - это когда вы создаете класс, включающий в себя другие классы в качестве своих атрибутов. Для примера, класс может иметь атрибут объекта класса вместо наследования от этого класса.
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Method Resolution Order (MRO) — это порядок, в котором интерпретатор ищет методы при множественном наследовании.
MRO описывает, как Python разрешает методы, вызываемые по наследству. Он определяет порядок, в котором функции и методы с одинаковыми именами в базовых классах располагаются при поиске.
По умолчанию Python использует алгоритм C3 линеаризации, чтобы вычислить MRO.
Этот алгоритм гарантирует, что при следовании MRO будут учитываться все исходные порядки, сохраняя при этом их локальный порядок.
MRO является важной концепцией множественного наследования в Python, и его понимание необходимо для эффективного использования этого языка.
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
В Linux можно найти идентификатор процесса (PID) с помощью утилиты ps.
Вы можете использовать команду ps aux | grep process_name для поиска процесса по его имени и показа его PID. Например:
ps aux | grep firefox
Это покажет все запущенные процессы Firefox, их PID и другую информацию.
Вы также можете использовать утилиту top, чтобы увидеть запущенные процессы и их PID. Команда top покажет текущую нагрузку на систему и список всех процессов, запущенных в данный момент. Она также отображает информацию о каждом процессе, включая его PID, процент использования процессора и использование памяти.
Чтобы узнать, сколько ресурсов занимает процесс, вы можете использовать утилиту ps. Команда ps отображает информацию о процессах, включая использование памяти. Вы можете использовать команду ps -p pid -o %cpu,%mem для показа процессорного и памятевого использования определенного процесса. Например:
ps -p 1234 -o %cpu,%mem
Это вернет процент использования процессора и памяти для процесса с PID 1234.
Если вы хотите увидеть более подробную информацию о процессах, вы можете использовать команду top.
В top вы можете сортировать процессы по использованию процессора или памяти, чтобы найти наиболее интенсивно использующий ресурсы процесс.
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть то, что объединяет всех разработчиков, неважно, на Python вы пишите или на чём-то ещё — это понимание git
Держите мощный туториал по системе контроля версий git и о его реализации на примере GitHub.
Самое то, если только разбираетесь с этим, да и для GitHub-гуру подойдёт, освежить основные понятия не помешает.
Некоторые факты из статьи:
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
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