reduce() ? Давайте сразу напишем такой пример:
numbers = [1, 11, 12, 13, 18, 9, 8, 6]
from functools import reduce
func = lambda acc, cur : acc + cur
total = reduce(func, numbers, 0)
print('Встроенная reduce: ',total)
def _reduce(callback, collection, init = 0):
acc = init
for k in collection:
acc = callback(acc, k)
return acc
_total = _reduce(func, numbers)
print('Моя reduce: ',_total)
Теперь объясним параметры и работу конструкции:
result = reduce( function, iterable[, initializer] ) :▫️
function — функция, применяемая к элементам итерации. Она должна принимать два аргумента.▫️
iterable — итерируемый объект, элементы которого вы хотите уменьшить. Это может быть список, кортеж или любой другой итерируемый объект.▫️
initializer — (необязательно): начальное значение аккумулятора (накопителя). Оно используется в качестве первого аргумента при первом вызове функции, если оно предусмотрено.⚠️ Обработка пустых итераций: Одной из распространенных ошибок при использовании функции
reduce() является обработка пустых итераций. Передача пустой итерации в reduce() без инициализатора вызывает Ошибку типа поскольку нет начального значения для запуска процесса сокращения. Чтобы избежать этого, всегда указывайте инициализатор, когда итерируемый объект может быть пустым.⚙️ Производительность:
▫️ Эффективность
reduce() по сравнению с циклами: Функция reduce() может быть более эффективной, чем явные циклы, потому что она реализована на C, что может обеспечить преимущества в производительности. Однако это преимущество часто незначительно и зависит от сложности применяемой функции.▫️Преимущества использования встроенных функций в производительности: Встроенные функции, такие как
sum(), min(), и max() высоко оптимизированы с точки зрения производительности. Они реализованы на C и могут выполнять операции быстрее, чем эквивалентный код Python с использованием reduce().reduce() ? Функция reduce() полезна при итеративной обработке данных, избегая явных циклов и делая код более читаемым и кратким. Некоторые распространенные варианты использования включают:▫️ Суммирование чисел в списке: Быстрое суммирование всех элементов.
▫️ Умножение элементов итеративного элемента: Вычисление произведения элементов.
▫️ Объединение строк: Объединение нескольких строк в одну.
▫️ Нахождение максимального или минимального значения: Определение самого большого или самого маленького элемента в последовательности.
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍5❤3🤯2
В этой заметке рассмотрим задачу с реального собеседования на Python-разработчика
Мы уже ознакомились с lambda-функциями и где они используются. Сейчас же исследуем вырванный из контекста реальный код и задания к нему.
🖥 Исходный код:
▪️ Что не так с кодом ? Если мы запустим в таком виде, то получим
▪️ Что код делает ? Есть некоторая функция, которая принимает в себя callback-функцию predicate и набор объектов (пустой по дефолту). Далее у нас как-то формируется список помеченных объектов, которые попадают в новый список только в том случае, если callback-функция возвращает для них
▪️ Что выведет на экран, если его исправить? Судя по тестовым параметрам, переданная lambda-функция ни на одном из элементов объекта
▪️ Функция оптимизирована? Нет. Дело в том, что она перебирает все остальные элементы (тратит память и время выполнения), когда мы можем ограничиться рассмотрением первого подходящего. Тогда код можно исправить так:
▪️ Какая сложность выполнения данной функции? В худшем случае: O(n) ; в лучшем случае : O(1).
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT mentor // @mentor_it
Мы уже ознакомились с lambda-функциями и где они используются. Сейчас же исследуем вырванный из контекста реальный код и задания к нему.
def get_first_matching_object(predicate,objects=[]):
matching_objects = (obj for obj in objects if predicate(obj))
if matching_objects:
object = matching_objects[0]
return object
return None
print(get_first_matching_object(lambda x: x == 1, [2, 3, 4]))
▪️ Что не так с кодом ? Если мы запустим в таком виде, то получим
TypeError: 'generator' object is not subscriptable. Это означает, что объект-генератор matching_objects представляет собой итератор: он генерирует значения в том порядке, в котором они запрашиваются циклом for или вызовом next(matching_objects). Однако, дальше по коду пытаются получить доступ по индексу так, как будто это список или любой другой Sequence-тип, который позволяет получать доступ к произвольным k-м элементам через matching_objects[k]. Если мы хотим, чтобы всё работало, нам нужно преобразовать в список list() или закрыть генератор в квадратные скобки: matching_objects = [obj for obj in objects if predicate(obj)]▪️ Что код делает ? Есть некоторая функция, которая принимает в себя callback-функцию predicate и набор объектов (пустой по дефолту). Далее у нас как-то формируется список помеченных объектов, которые попадают в новый список только в том случае, если callback-функция возвращает для них
True. Следующая конструкция говорит нам о том, что если полученный список matching_objects не пустой, то мы выделяем первый входящий в него объект и возвращаем его. В противном случае возвращается None. Но последняя строчка не является обязательной. Потому что, в случае НЕсрабатывания условного оператора, у нас итак вернется None.▪️ Что выведет на экран, если его исправить? Судя по тестовым параметрам, переданная lambda-функция ни на одном из элементов объекта
[2, 3, 4] не вернет True. Поэтому список matching_objects окажется пустым, в итоге нам вернется None. ▪️ Функция оптимизирована? Нет. Дело в том, что она перебирает все остальные элементы (тратит память и время выполнения), когда мы можем ограничиться рассмотрением первого подходящего. Тогда код можно исправить так:
def get_first_matching_object(predicate,objects=[]):
for obj in objects:
if predicate(obj):
return obj
return None
print(get_first_matching_object(lambda x: x == 1, [1, 2, 3, 4])) # 1
▪️ Какая сложность выполнения данной функции? В худшем случае: O(n) ; в лучшем случае : O(1).
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥6❤4
💡 Как перенести названия всех файлов текущей директории в текстовый файл .txt в Python?
Решил написать небольшой скрипт на Python. Повседневная задача редактора технического канала: Перенести названия всех файлов из нужной директории (задается путем), и записать их в текстовый файл example.txt с добавлением номеров каждого файла. Записать имена в файл с предварительной сортировкой по дате создания (или скачивания). Рассказываю как это реализовать на Python в несколько строк...
👨🏻💻 Читать заметку полностью
#python #файлы #информатика #программирование #OS
💡 Репетитор IT mentor // @mentor_it
Решил написать небольшой скрипт на Python. Повседневная задача редактора технического канала: Перенести названия всех файлов из нужной директории (задается путем), и записать их в текстовый файл example.txt с добавлением номеров каждого файла. Записать имена в файл с предварительной сортировкой по дате создания (или скачивания). Рассказываю как это реализовать на Python в несколько строк...
👨🏻💻 Читать заметку полностью
#python #файлы #информатика #программирование #OS
💡 Репетитор IT mentor // @mentor_it
👍11❤2🔥1🤨1
Это заметка будет для начинающих, которые только знакомятся с программированием, информатикой и с языком Python, в частности. Вчера мы с учеником изучали циклы и некоторые операторы, которые дают возможность управлять циклами. В этой небольшой статье я покажу несколько примеров. При этом от совсем простых абстракций постараемся углубиться в более полезные вещи с практической точки зрения. [ Уровень сложности: ~7..8 класс ]
👨🏻💻 Читать заметку полностью
#python #алгоритмы #информатика #программирование #циклы
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🔥1😢1🤩1
# Перевод из десятичной в двоичную
# Пример: вход: x = 589 и base = 16
# выход: 24D
def dec_to_base(x, base):
digits = ['0','1','2','3','4','5','6',
'7','8','9','A','B','C','D','E','F']
copy = x
s = ''
while copy > 0:
rest = copy % base
copy = copy // base
s = digits[rest] + s
return s
x = 589
base = 16
print(f'{x} в {base}-чной СС: {dec_to_base(x,base)}')
589 в 16-чной СС: 24D#разбор_задач #программирование #информатика #python #code #computer_science
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤🔥4👨💻2❤1🔥1
Сегодня с учениками разбирали программирование и я получил такой вопрос: «Можно ли запрограммировать задачу 17-го типа из ВПР по математике?». Что ж... И мы это с вами сделаем.
📝 Читать полный разбор
#егэ #огэ #информатика #математика #разбор_задач #python
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥6🤔2❤1🤩1
В этой статье я расскажу как обычных людей
Математика и банковская система... Как они работают? Сегодня я расскажу вам удивительную историю о том, что система всегда будет работать против вас, при этом она всегда будет создавать красочную иллюзию того, чтоб призвана помогать вам. Хотя на самом деле, система вас уничтожит, как только вы потеряете внимательность.
👨🏻💻 Читать заметку полностью
#финансы #python #экономика #математика #бизнес #мошенничество
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4💯3❤1
👨🏻💻 Рекурсия и задача с исполнителем из ЕГЭ по информатике
Недавно разбирали с учеником 23 задачу из ЕГЭ по информатике. Хотел бы поделиться своими мыслями и некоторыми лайфхаками решения этой задачи с моими дорогими подписчиками. Очень надеюсь, что кому-нибудь эта заметка будет полезна или хотя бы интересна. Поэтому прошу не поскупиться на обратную связь, если эта тема интересна. А пока погнали начинать, сразу с практики :)
💡 Читать статью
📝 Задача: ... Сколько существует таких программ, которые исходное число 3 преобразуют в число 12 и при этом траектория вычислений программы содержит число 10?.. #рекурсия #программирование #python #ЕГЭ
💡 Репетитор IT mentor // @mentor_it
Недавно разбирали с учеником 23 задачу из ЕГЭ по информатике. Хотел бы поделиться своими мыслями и некоторыми лайфхаками решения этой задачи с моими дорогими подписчиками. Очень надеюсь, что кому-нибудь эта заметка будет полезна или хотя бы интересна. Поэтому прошу не поскупиться на обратную связь, если эта тема интересна. А пока погнали начинать, сразу с практики :)
💡 Читать статью
📝 Задача: ... Сколько существует таких программ, которые исходное число 3 преобразуют в число 12 и при этом траектория вычислений программы содержит число 10?.. #рекурсия #программирование #python #ЕГЭ
💡 Репетитор IT mentor // @mentor_it
👍8🔥4❤2
Для решения систем линейных алгебраических уравнений (СЛАУ) большой размерности, а также систем, имеющих разреженные матрицы, применение точных методов (например, метод Гаусса) не является целесообразным, так как...
👨🏻💻Читать статью полностью 📝
#программирование #математика #python #разбор_задач #численные_методы
💡 Репетитор IT men // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4❤3
👨🏻💻 Парсинг Excel-файлов на Python на примере задачи из ЕГЭ по информатике
Сегодня разберем с вами довольное сложное 22 задание. Здесь стоит дать пояснения. Составители ЕГЭ каждый раз выдумывают что-то новое, поэтому никогда не знаешь, что ожидать в следующий раз. Недавно на занятиях с учениками попалась задача, которая не решается обычными формулами, встроенными в Excel (во всяком случае я не знаю, как её автоматизировать средствами ТОЛЬКО Excel). И тут повезло, что таблица была небольшой, поэтому можно было решить задачу руками. Но я сразу же задумался над тем, а что если записей в ней было бы гораздо больше? Что если руками решать было бы не целесообразно, потому что это заняло бы бесконечно большое время, которого нет на экзамене? Как же тогда автоматизировать решение? Об этом мы сегодня с вами и поговорим...
💡 Читать статью полностью
Заваривайте чай, здесь нужно будет посидеть и подумать...☕️🫖
#парсинг #excel #python #ЕГЭ #программирование #информатика #анализ_данных #разбор_задач
🤔 Репетитор IT men // @mentor_it
Сегодня разберем с вами довольное сложное 22 задание. Здесь стоит дать пояснения. Составители ЕГЭ каждый раз выдумывают что-то новое, поэтому никогда не знаешь, что ожидать в следующий раз. Недавно на занятиях с учениками попалась задача, которая не решается обычными формулами, встроенными в Excel (во всяком случае я не знаю, как её автоматизировать средствами ТОЛЬКО Excel). И тут повезло, что таблица была небольшой, поэтому можно было решить задачу руками. Но я сразу же задумался над тем, а что если записей в ней было бы гораздо больше? Что если руками решать было бы не целесообразно, потому что это заняло бы бесконечно большое время, которого нет на экзамене? Как же тогда автоматизировать решение? Об этом мы сегодня с вами и поговорим...
💡 Читать статью полностью
Заваривайте чай, здесь нужно будет посидеть и подумать...☕️🫖
#парсинг #excel #python #ЕГЭ #программирование #информатика #анализ_данных #разбор_задач
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥3😱1
N = int(input("Введите количество чисел: "))
print("Ответ: ", min([ x for x in [int(input("x = ")) for x in range(N)] if x % 10 == 4 ]))N = int(input("Введите количество чисел:"))
mi = 30000
for k in range(N):
number = int(input("Текущее число: "))
if (number % 10 == 4) and (number < mi):
mi = number
print("Минимальное число, оканч-ся на 4: ", mi)N = int(input("Введите количество чисел: "))
min_4 = 30000
k = 1
while k <= N:
number = int(input("Текущее число: "))
if (number % 10 == 4) and (number < min_4):
min_4 = number
k = k + 1
print("Минимальное число, оканч-ся на 4: ", min_4)#информатика #программирование #computer_science #алгоритмы #python
💡 Репетитор IT men // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤1🍓1👨💻1💘1
✍🏻 Решать аналитически или кодить 🖥
Рассмотрим 2 задачу из ЕГЭ по информатике. На мой взгляд, полезно совмещать эти варианты, чтобы быть уверенным в ответе.
▪️ В аналитическом решении нужно рассмотреть все строки, начиная с максимально заполненной. Важно держать в голове, что все строки уникальные (комбинации не повторяются, порядок имеет значение). Таким образом, мы последовательно открываем соответствия x, y, z исходным переменная_1, переменная_2, переменная_3.
▪️ При моделировании задачи и перебору подходящих решений, мы сразу получаем нужные комбинации, но чтобы понять как они расположены в таблицы, всё равно приходится осмысливать эти комбинации на черновике.
Много интересных статей на моём канале в Дзен:
📱 Репетитор IT men
#математика #информатика #егэ #разбор_задач #python #computer_science
💡 Репетитор IT men // @mentor_it
Рассмотрим 2 задачу из ЕГЭ по информатике. На мой взгляд, полезно совмещать эти варианты, чтобы быть уверенным в ответе.
▪️ В аналитическом решении нужно рассмотреть все строки, начиная с максимально заполненной. Важно держать в голове, что все строки уникальные (комбинации не повторяются, порядок имеет значение). Таким образом, мы последовательно открываем соответствия x, y, z исходным переменная_1, переменная_2, переменная_3.
▪️ При моделировании задачи и перебору подходящих решений, мы сразу получаем нужные комбинации, но чтобы понять как они расположены в таблицы, всё равно приходится осмысливать эти комбинации на черновике.
Много интересных статей на моём канале в Дзен:
#математика #информатика #егэ #разбор_задач #python #computer_science
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4✍2🔥2🎅1🎄1💘1
📝 Разбор задачи #5 из ЕГЭ по информатике
▪️Тот случай, когда аналитически решить может быть быстрее, потому что уже следующее значение R = 78 удовлетворяет решению и даёт N = 19.
▪️Но код тоже можно написать. Понадобится функция algo(), которая будет добавлять нужный бит в конец двоичного представления. Написать можно по-разному. Приведу лишь решение, которое мне пришло первым в голову.
🖥 Код в Python:
А как бы вы закодили решение данной задачи?
Ещё полезные заметки: Callback в Python и О лямбда-функциях в Python и Reduce в Python и Задача с собеседования
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT men // @mentor_it
▪️Тот случай, когда аналитически решить может быть быстрее, потому что уже следующее значение R = 78 удовлетворяет решению и даёт N = 19.
▪️Но код тоже можно написать. Понадобится функция algo(), которая будет добавлять нужный бит в конец двоичного представления. Написать можно по-разному. Приведу лишь решение, которое мне пришло первым в голову.
def algo( N ):
lst = list(map(int, list(bin(N)[2:])))
digit = str(sum(lst) % 2)
return int(bin(N)[2:] + digit, 2)
for N in range(1000):
R = algo(algo(N))
if R > 77:
print(f"N = {N}")
break
А как бы вы закодили решение данной задачи?
Ещё полезные заметки: Callback в Python и О лямбда-функциях в Python и Reduce в Python и Задача с собеседования
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT men // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥2👨💻2