Напишите функцию на Python, которая принимает корень бинарного дерева поиска и целое число k, и возвращает k-ый по величине элемент в этом дереве.
Условия:
Бинарное дерево поиска (BST) - это дерево, в котором каждый узел имеет не более двух детей, и для каждого узла его левое поддерево содержит только узлы с ключами, меньшими чем ключ узла, а правое поддерево - только узлы с ключами, большими чем ключ узла.
k всегда валидно и находится в пределах количества узлов в дереве.
Объяснение:
Функция kthSmallest принимает корень бинарного дерева и число k.
Вложенная функция inorder реализует обход дерева в порядке "лево-корень-право", что гарантирует получение элементов в порядке возрастания.
Рекурсивный вызов inorder собирает значения узлов в список.
Функция возвращает k-1 элемент этого списка, так как индексация в Python начинается с нуля.
Этот вопрос проверяет знания кандидата в области алгоритмов обхода дерева, рекурсии и понимания структур данных, таких как бинарные деревья поиска.
🔗 Python tricks
Условия:
Бинарное дерево поиска (BST) - это дерево, в котором каждый узел имеет не более двух детей, и для каждого узла его левое поддерево содержит только узлы с ключами, меньшими чем ключ узла, а правое поддерево - только узлы с ключами, большими чем ключ узла.
k всегда валидно и находится в пределах количества узлов в дереве.
Объяснение:
Вложенная функция inorder реализует обход дерева в порядке "лево-корень-право", что гарантирует получение элементов в порядке возрастания.
Рекурсивный вызов inorder собирает значения узлов в список.
Функция возвращает k-1 элемент этого списка, так как индексация в Python начинается с нуля.
Этот вопрос проверяет знания кандидата в области алгоритмов обхода дерева, рекурсии и понимания структур данных, таких как бинарные деревья поиска.
🔗 Python tricks
Обработка ошибок во время выполнения
Это самый полезный совет для программистов, работающих с Python. Вы можете устранить ошибку и избавить программу от сбоев во время выполнения.
🔗 Python tricks
Это самый полезный совет для программистов, работающих с Python. Вы можете устранить ошибку и избавить программу от сбоев во время выполнения.
🔗 Python tricks
Используйте метод “Enumerate” Для элегантного перебора списков
В некоторых случаях нам необходимо использовать как индекс, так и значения элементов в списке при его повторении.
Мы можем написать подобную логику на Python, но my_list[i] кажется немного неуместным, особенно когда нам нужно вызывать значение элемента много раз.
Реальный питоновский способ сделать это - использовать функцию enumerate() для получения как индекса, так и значений напрямую.
🔗 Python tricks
В некоторых случаях нам необходимо использовать как индекс, так и значения элементов в списке при его повторении.
Мы можем написать подобную логику на Python, но my_list[i] кажется немного неуместным, особенно когда нам нужно вызывать значение элемента много раз.
Реальный питоновский способ сделать это - использовать функцию enumerate() для получения как индекса, так и значений напрямую.
🔗 Python tricks
Добавление вложенных списков
Метод
Итак, у нас был список
Простой список добавляется во вложенный список как отдельный одинарный элемент.
🔗 Python tricks
Метод
append()
может работать и с вложенными списками, а не только с простыми.Итак, у нас был список
nested_list
, внутри которого уже были два вложенных списка [[1, 2], [3, 4]]
.Простой список добавляется во вложенный список как отдельный одинарный элемент.
🔗 Python tricks
argcomplete
argcomplete — это библиотека для автоматического дополнения аргументов командной строки в Python. Это может быть полезно при разработке сценариев командной строки, когда вы хотите, чтобы ваш скрипт предлагал возможные аргументы и значения при нажатии клавиши Tab.
argcomplete поддерживает не все оболочки по умолчанию, и вам может потребоваться настроить ее соответствующим образом для вашей среды выполнения.
🔗 Python tricks
argcomplete — это библиотека для автоматического дополнения аргументов командной строки в Python. Это может быть полезно при разработке сценариев командной строки, когда вы хотите, чтобы ваш скрипт предлагал возможные аргументы и значения при нажатии клавиши Tab.
argcomplete поддерживает не все оболочки по умолчанию, и вам может потребоваться настроить ее соответствующим образом для вашей среды выполнения.
🔗 Python tricks
__subclasshook__
__subclasshook__
— это метод, который можно определить в классе, чтобы влиять на процесс проверки, является ли данный класс подклассом другого класса. Этот метод обычно используется вместе с метаклассами и полезен, например, при создании абстрактных базовых классов.
Протокол subclasshook предоставляет способ определить подходит ли класс для использования в качестве подкласса заданного класса. Если метод возвращает
🔗 Python tricks
__subclasshook__
— это метод, который можно определить в классе, чтобы влиять на процесс проверки, является ли данный класс подклассом другого класса. Этот метод обычно используется вместе с метаклассами и полезен, например, при создании абстрактных базовых классов.
Протокол subclasshook предоставляет способ определить подходит ли класс для использования в качестве подкласса заданного класса. Если метод возвращает
True
, то класс считается подклассом. Если метод возвращает NotImplemented
, то это означает, что проверка должна быть выполнена с использованием стандартных правил.🔗 Python tricks
Добавление элемента только при выполнении условия
Вы можете добавить условие для использования
В этом примере, если
🔗 Python tricks
Вы можете добавить условие для использования
append()
. Если условие выполняется или если условия нет, append()
добавляет элемент в конец списка. Всё как обычно.В этом примере, если
temp
больше 25, то метод append()
добавляет элементы в конец списка numbers
. В нашем случае, это 30 и 27.🔗 Python tricks
Строки тоже итерируются
Преобразуем все буквы в заглавные.
🔗 Python tricks
map()
использует «дочернюю» функцию на любом объекте, где применим цикл for
. Мы можем применять ее к любому итерируемому объекту, даже к strings.Преобразуем все буквы в заглавные.
🔗 Python tricks
Отличие append() от extend()
Метод
Таким образом, метод
Дело в том, что
🔗 Python tricks
Метод
extend()
также используется для добавления элементов в список, но в отличие от append()
, он принимает итерируемый объект (например, другой список) и добавляет его элементы по отдельности.Таким образом, метод
extend()
объединяет содержимое двух списков, тогда как метод append()
просто добавляет новый элемент в конец списка.Дело в том, что
append()
добавляет один элемент, в то время как extend()
добавляет все элементы переданного списка поочередно.🔗 Python tricks
map() + лямбды
Мы можем комбинировать мэппинг с безымянными функциями, чтобы код стал еще короче.
Возведя все элементы списка ls в квадрат, мы получим такой результат.
🔗 Python tricks
Мы можем комбинировать мэппинг с безымянными функциями, чтобы код стал еще короче.
Возведя все элементы списка ls в квадрат, мы получим такой результат.
🔗 Python tricks
Конкатенация списков с использованием append()
Когда мы используем
Результат этого кода —
🔗 Python tricks
Когда мы используем
append()
с другим списком, происходит не конкатенация (слияние) списков в привычном понимании, а добавление одного списка как элемента в другой список.Результат этого кода —
list1 = [1, 2, 3, [4, 5, 6]]
. Теперь list2
стал элементом последнего элемента списка list1
.🔗 Python tricks
self() для обращения объекта к себе
В данном случае
🔗 Python tricks
В данном случае
self
позволяет перемножить элементы списка на 2.🔗 Python tricks
Загонка пользовательского ввода
Сотрудничество
🔗 Python tricks
Сотрудничество
map()
, input()
и list()
позволит поместить весь пользовательский текст в список. Это может пригодиться при расчете эмоциональной окраски текста, ведь слова предстоит потом возвращать к исходной форме🔗 Python tricks
Функция math.gcd()
Функция math.gcd() используется для вычисления наибольшего общего делителя (НОД) двух целых чисел. НОД — это наибольшее число, которое является делителем обоих чисел.
Синтаксис:
math.gcd(a, b)
🔗 Python tricks
Функция math.gcd() используется для вычисления наибольшего общего делителя (НОД) двух целых чисел. НОД — это наибольшее число, которое является делителем обоих чисел.
Синтаксис:
math.gcd(a, b)
🔗 Python tricks
Библиотека Qiskit
Qiskit — это открытая библиотека для работы с квантовыми вычислениями в Python. Она предоставляет инструменты для создания, симуляции и запуска квантовых программ на реальных квантовых устройствах.
Вы можете изучить документацию Qiskit для получения более подробной информации и примеров использования.
🔗 Python tricks
Qiskit — это открытая библиотека для работы с квантовыми вычислениями в Python. Она предоставляет инструменты для создания, симуляции и запуска квантовых программ на реальных квантовых устройствах.
Вы можете изучить документацию Qiskit для получения более подробной информации и примеров использования.
🔗 Python tricks
Twisted
Twisted — это асинхронный фреймворк для разработки сетевых приложений на языке Python. Он предоставляет реализацию множества протоколов, таких как TCP, UDP, SSL/TLS, DNS, и других, используя асинхронный стиль программирования.
Код выше создает TCP-сервер, прослушивающий порт 1234, и при подключении клиента создает экземпляр MyProtocol, который обрабатывает данные в методе dataReceived. В приведенном примере, сервер просто отправляет обратно полученные данные.
Twisted также предоставляет возможности для работы с асинхронными задачами, таймерами, и другими асинхронными концепциями. Это позволяет создавать эффективные и отзывчивые сетевые приложения.
Обратите внимание, что использование Twisted может потребовать времени для изучения, так как он предоставляет множество возможностей для работы с сетевыми протоколами и асинхронным программированием.
🔗 Python tricks
Twisted — это асинхронный фреймворк для разработки сетевых приложений на языке Python. Он предоставляет реализацию множества протоколов, таких как TCP, UDP, SSL/TLS, DNS, и других, используя асинхронный стиль программирования.
Код выше создает TCP-сервер, прослушивающий порт 1234, и при подключении клиента создает экземпляр MyProtocol, который обрабатывает данные в методе dataReceived. В приведенном примере, сервер просто отправляет обратно полученные данные.
Twisted также предоставляет возможности для работы с асинхронными задачами, таймерами, и другими асинхронными концепциями. Это позволяет создавать эффективные и отзывчивые сетевые приложения.
Обратите внимание, что использование Twisted может потребовать времени для изучения, так как он предоставляет множество возможностей для работы с сетевыми протоколами и асинхронным программированием.
🔗 Python tricks
Недостатки map()
К недостаткам
Это неплохо на малых оборотах, но на практике, где данные весьма разнообразны, без просмотра результата вероятность ошибок на проде увеличивается: мы просто не увидим потенциальных проблем.
🔗 Python tricks
К недостаткам
map()
, так же как и в случае с filter()
, можно отнести «ленивую оценку» (Lazy Evaluation). Создатели языка сделали немало в 3-й версии, чтобы улучшить производительность языка, и потому вместо обработанного объекта по умолчанию нам возвращается ссылка на итератор. Пока мы не обернем ее в list()
или другой метод, обработка функцией-дочкой еще не произошла.Это неплохо на малых оборотах, но на практике, где данные весьма разнообразны, без просмотра результата вероятность ошибок на проде увеличивается: мы просто не увидим потенциальных проблем.
🔗 Python tricks
Напишите функцию на Python, которая принимает строку и возвращает словарь, содержащий количество вхождений каждого слова в строке. Считайте, что слова в строке разделяются пробелами, и игнорируйте знаки препинания.
Для начала используем метод
Затем приводим текст к нижнему регистру, чтобы учесть все слова независимо от регистра. После этого используем метод
Создаём пустой словарь
Наконец, возвращаем словарь
🔗 Python tricks
Для начала используем метод
translate
для удаления знаков препинания из исходной строки. Модуль string
предоставляет строку punctuation
, содержащую все знаки препинания. Метод translate
использует таблицу перевода для удаления указанных символов. Затем приводим текст к нижнему регистру, чтобы учесть все слова независимо от регистра. После этого используем метод
split()
для разделения текста на список слов.Создаём пустой словарь
word_count
для подсчета вхождений каждого слова. Затем, используя цикл for
, проходимся по списку слов и обновляем счетчик в словаре. Если слово уже есть в словаре, увеличиваем его счетчик на 1; если нет, добавляем его в словарь с начальным счетчиком 1.Наконец, возвращаем словарь
word_count
, который содержит количество вхождений каждого слова в тексте.🔗 Python tricks
string.strip
Метод strip() удаляет все начальные и конечные пробелы из заданной строки. С помощью параметра chars ты указываешь набор символов, которые необходимо удалить как из левой, так и из правой частей строки.
🔗 Python tricks
Метод strip() удаляет все начальные и конечные пробелы из заданной строки. С помощью параметра chars ты указываешь набор символов, которые необходимо удалить как из левой, так и из правой частей строки.
🔗 Python tricks
Рандомные координаты
Про комикс, который вызывается с помощью import antigravity слышали все (если вы его не видели, то ловите). Но если покопаться, можно найти пасхалку в пасхалке: в модуле antigravity.py можно найти функцию geohash, которая открывает другой комикс и генерирует случайные координаты.
🔗 Python tricks
Про комикс, который вызывается с помощью import antigravity слышали все (если вы его не видели, то ловите). Но если покопаться, можно найти пасхалку в пасхалке: в модуле antigravity.py можно найти функцию geohash, которая открывает другой комикс и генерирует случайные координаты.
🔗 Python tricks