⚡️ Поиск в ширину
Тут про DFS. А в этот раз поговорим про breadth-first Search — алгоритм, способный быстро и без ограничений пройтись по графу.
Алгоритм: Сначала берём стартовую вершину и добавляем в очередь. После вытаскиваем её из очереди и добавляем соседей. С соседями делаем тоже самое, что и с первой вершиной.
BFS часто используют для вычисления расстояния между вершинами, поиска кратчайшего пути.
#алгоритмы #графы
Тут про DFS. А в этот раз поговорим про breadth-first Search — алгоритм, способный быстро и без ограничений пройтись по графу.
Алгоритм: Сначала берём стартовую вершину и добавляем в очередь. После вытаскиваем её из очереди и добавляем соседей. С соседями делаем тоже самое, что и с первой вершиной.
BFS часто используют для вычисления расстояния между вершинами, поиска кратчайшего пути.
#алгоритмы #графы
⚡️ Задачка с собеседования | #Medium
Условие:
Напишите функцию, которая принимает список чисел и переносит все нули в его конец. Функция не должна ничего возвращать, она только меняет существующий массив.
Придумайте решение без append, pop и remove, это довольно медленные операции.
Пример:
move_zeros([1, 0, 0]) ➞ [1, 0, 0]
move_zeros([1, 0, 5]) ➞ [1, 5, 0]
move_zeros([0, 0, 1]) ➞ [1, 0, 0]
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
Условие:
Напишите функцию, которая принимает список чисел и переносит все нули в его конец. Функция не должна ничего возвращать, она только меняет существующий массив.
Придумайте решение без append, pop и remove, это довольно медленные операции.
Пример:
move_zeros([1, 0, 0]) ➞ [1, 0, 0]
move_zeros([1, 0, 5]) ➞ [1, 5, 0]
move_zeros([0, 0, 1]) ➞ [1, 0, 0]
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
⚡️ Фишка срезов
С помощью срезов мы можем не просто получать определённое количество элементов, а и менять их. Называют это так: «Изменение путем присваивания».
Таким образом мы заменяем элементы внутри этого среза другими из итератора (список, кортёж, словарь, range).
С их помощью мы также можем добавлять/удалять элементы, опустошать список и многое другое. Но в разреженных срезах такое не работает.
#теория
С помощью срезов мы можем не просто получать определённое количество элементов, а и менять их. Называют это так: «Изменение путем присваивания».
Таким образом мы заменяем элементы внутри этого среза другими из итератора (список, кортёж, словарь, range).
С их помощью мы также можем добавлять/удалять элементы, опустошать список и многое другое. Но в разреженных срезах такое не работает.
#теория
⚡️ Парсим XML и HTML
И самым лучшим выбором для этого является lxml. Это библиотека позволяет быстро обрабатывать файлы XML и HTML формата.
Установка:
Единственным недостатком модуля является его сильная зависимость от C. Подробнее обо всём на GitHub.
#миниурок #lxml
И самым лучшим выбором для этого является lxml. Это библиотека позволяет быстро обрабатывать файлы XML и HTML формата.
Установка:
pip install lxml
Он намного быстрее, чем html.parser и с ним в разы проще работать. Более стабильной и удобной альтернативой является html5lib, но это довольно медленная библиотека.Единственным недостатком модуля является его сильная зависимость от C. Подробнее обо всём на GitHub.
#миниурок #lxml
⚡️ Задачка с собеседования | #Medium
Условие:
Вам нужно найти в промежутке от a до b (range(a, b + 1)) числа с особым свойством. Это те, у которых сумма их цифр, возведенных в степень их позиции равняется тому же числу.
Примеры:
sum_dig_pow(1, 100) ➞ [1, 2, 3, 4, 5, 6, 7, 8, 9, 89]
sum_dig_pow(100, 135) ➞ [135]
sum_dig_pow(90, 100) ➞ []
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
Условие:
Вам нужно найти в промежутке от a до b (range(a, b + 1)) числа с особым свойством. Это те, у которых сумма их цифр, возведенных в степень их позиции равняется тому же числу.
Примеры:
sum_dig_pow(1, 100) ➞ [1, 2, 3, 4, 5, 6, 7, 8, 9, 89]
sum_dig_pow(100, 135) ➞ [135]
sum_dig_pow(90, 100) ➞ []
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
⚡️ Создаём игру
С помощью arcade мы можем создавать полноценные игры с 2D графикой.
Установка:
Конечно, есть и недостатки: вам придётся вручную управлять окном и его рендером, а также циклом обработки действий.
У модуля очень хорошая документация, поэтому проблем с его изучением возникнуть не должно.
#миниурок #arcade
С помощью arcade мы можем создавать полноценные игры с 2D графикой.
Установка:
pip install arcade
Модуль может отрисовывать спрайты, анимировать их, работать с клавиатурой и со звуками. Но у него реализованы и более сложные системы, такие как физика и система частиц.Конечно, есть и недостатки: вам придётся вручную управлять окном и его рендером, а также циклом обработки действий.
У модуля очень хорошая документация, поэтому проблем с его изучением возникнуть не должно.
#миниурок #arcade
⚡️ Генераторы и yield
В Python есть объекты, которые могут возвращать не одно значение, а несколько. Делается это за счёт оператора yield.
Когда мы используем его в функции и вызываем её, в результате получаем генератор. Получить значение из него можно с помощью функции
Код в функции выполняется также, как и всегда, но останавливается, когда встречает yield и ждёт следующего вызова
Также по генератором можно пройтись с помощью цикла for, но только один раз.
#теория
В Python есть объекты, которые могут возвращать не одно значение, а несколько. Делается это за счёт оператора yield.
Когда мы используем его в функции и вызываем её, в результате получаем генератор. Получить значение из него можно с помощью функции
next()
.Код в функции выполняется также, как и всегда, но останавливается, когда встречает yield и ждёт следующего вызова
next()
.Также по генератором можно пройтись с помощью цикла for, но только один раз.
#теория
Что выведет код выше?
Anonymous Quiz
7%
True True True
43%
True False True
25%
False False True
4%
False False False
13%
Ошибку
8%
Узнать ответ
⚡️ Шаблон Снимок
Паттерн позволяет сохранять и восстанавливать прошлые состояния объектов, при этом не раскрывая подробности их реализации.
Представим, что нам надо сохранить данные об игроке. И если позиция вполне может быть публичной переменной, то состояние игрока будет скрыто.
Класс игрока может самостоятельно собрать данные, которые необходимо сохранить и вернуть их в виде объекта Memento. Также класс игрока реализует восстановление из Memento.
#паттерны #memento
Паттерн позволяет сохранять и восстанавливать прошлые состояния объектов, при этом не раскрывая подробности их реализации.
Представим, что нам надо сохранить данные об игроке. И если позиция вполне может быть публичной переменной, то состояние игрока будет скрыто.
Класс игрока может самостоятельно собрать данные, которые необходимо сохранить и вернуть их в виде объекта Memento. Также класс игрока реализует восстановление из Memento.
#паттерны #memento
⚡️ Задачка с собеседования | #Medium
Условие:
По заданному числу найдите перестановку с наименьшим абсолютным значением (без нулей в начале числа). На вход идёт целое число и в результате тоже должно быть целое число.
Примеры:
min_permutation(0) ➞ 0
min_permutation(-20) ➞ -20
min_permutation(293940) ➞ 203499
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования
Условие:
По заданному числу найдите перестановку с наименьшим абсолютным значением (без нулей в начале числа). На вход идёт целое число и в результате тоже должно быть целое число.
Примеры:
min_permutation(0) ➞ 0
min_permutation(-20) ➞ -20
min_permutation(293940) ➞ 203499
📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇
#Задачка_с_собеседования