📦 Разбор задачи: инвентаризация на складе
Было предложено использовать множества, и это хорошая идея с точки зрения чистоты и читаемости кода.
Идея такая: создать эталонное множество всех номеров от 1 до N, затем вычесть из него множество номеров из нашего списка.
Как это работает?
-
-
- Операция вычитания
Это лаконично и понятно, но главное условие задачи нарушено. Создание двух множеств съедает дополнительную память, пропорциональную размеру ввода. Сложность по памяти здесь —
Как же быть?
Можно использовать сам входной список
Как это работает? ✨
1️⃣ Фаза разметки:
- Мы проходим по списку
- Для каждого числа
- Этот
- Мы "помечаем" ячейку
Пример: Встретили 4. Идем в nums[3] и меняем знак у числа, которое там лежит.
2️⃣ Фаза сбора:
- После первого прохода в списке
- А вот если по какому-то индексу
- Мы при помощи list comprehension собираем все
Временная сложность:
Пространственная сложность:
#алгособес
Было предложено использовать множества, и это хорошая идея с точки зрения чистоты и читаемости кода.
Идея такая: создать эталонное множество всех номеров от 1 до N, затем вычесть из него множество номеров из нашего списка.
def find_disappeared_set(nums):
n = len(nums)
all_cells = set(range(1, n + 1))
present_cells = set(nums)
return list(all_cells - present_cells)
Как это работает?
-
set(range(1, n + 1)) создает множество всех возможных номеров ячеек.-
set(nums) создает множество только тех номеров, что нам дали, попутно убирая дубликаты.- Операция вычитания
- оставляет в all_cells только те элементы, которых не было в present_cells.Это лаконично и понятно, но главное условие задачи нарушено. Создание двух множеств съедает дополнительную память, пропорциональную размеру ввода. Сложность по памяти здесь —
O(N), а не O(1).Как же быть?
Можно использовать сам входной список
nums как "карту" для отметок. Мы будем менять знак числа по определенному индексу, чтобы пометить, что число, соответствующее этому индексу, нам встретилось.def find_disappeared_numbers(nums):
for n in nums:
a = abs(n) - 1
if nums[a] > 0: nums[a] *= -1
return [i+1 for i in range(len(nums)) if nums[i] > 0]
Как это работает? ✨
- Мы проходим по списку
nums один раз.- Для каждого числа
n мы берем его модуль abs(n) (на случай, если его уже сделали отрицательным) и вычисляем индекс index = abs(n) - 1.- Этот
index как раз соответствует "месту" числа n в отсортированном списке. Например, для числа 4 это будет индекс 3.- Мы "помечаем" ячейку
nums[index], делая ее отрицательной. Если она уже отрицательная, ничего не трогаем.Пример: Встретили 4. Идем в nums[3] и меняем знак у числа, которое там лежит.
- После первого прохода в списке
nums все числа на тех позициях, которые нам встречались, стали отрицательными.- А вот если по какому-то индексу
i число осталось положительным — это значит, что число i + 1 нам ни разу не встретилось в исходном списке!- Мы при помощи list comprehension собираем все
i + 1 для положительных nums[i].Временная сложность:
O(N) (два прохода по списку, но не вложенных).Пространственная сложность:
O(1) (модифицируем исходный список).#алгособес
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4🙏1
Что получим при запуске кода?
Anonymous Quiz
47%
{0, 1, 2, 3}
6%
None
19%
{0: 0, 1: 1, 2: 2, 3: 3}
17%
{range(0, 4)}
7%
{1, 2, 3, 4}
3%
{1: 1, 2: 2, 3: 3, 4: 4}
😭16👍6 4🔥1
Cпрос на аналитиков держится на одной простой вещи: бизнес хочет принимать решения на основе данных, а не догадок. Аналитик — это переводчик с языка цифр на язык бизнес-решений.
Базовый стек, без которого сегодня никуда, выглядит так:
🔵 Excel / Google Sheets. Да, всё ещё основа основ. Сводные таблицы, формулы, фильтры — это гигиенический минимум, с которого всё начинается.
🔵 SQL. Язык для общения с базами данных. Нужно уметь не просто писать SELECT, а уверенно соединять таблицы (JOIN), группировать и агрегировать данные. Без этого вы просто не добудете сырьё для анализа.
🔵 Python. Главный инструмент для серьёзной работы. Библиотека pandas для обработки и анализа данных, matplotlib и seaborn для визуализации — это стандарт индустрии.
🔵 BI-системы. Чтобы превратить сухие таблицы в наглядные дашборды, которые поймёт даже топ-менеджер, далёкий от кода.
🔵 Понимание статистики и бизнес-метрик. Инструменты — это полдела. Нужно уметь формулировать гипотезы, проводить A/B-тесты и понимать, что такое LTV или Retention.
Собрать всё это в систему самостоятельно — задача нетривиальная. Для тех, кто ценит время и структурированный подход, есть готовые решения.
Например, курс «Аналитик данных» от Skypro построен как раз вокруг этого стека.
Что там предлагают?
🟢 Гарантия трудоустройства — прописана в договоре. Если за 6 месяцев после курса не найдёте работу, вернут деньги. Это сильный аргумент.
🟢 Практика на реальных задачах. Обещают, что к концу обучения будет готовое портфолио, а не просто набор домашних заданий.
🟢 Полный набор инструментов: от Excel и SQL до Python и Power BI. Плюс отдельный блок по A/B-тестам.
🟢 Карьерный центр. Помогают с резюме, портфолио и готовят к собеседованиям.
Можно бесплатно посмотреть первые уроки по каждой теме, чтобы оценить подачу и понять, подходит ли вам такой формат.
Реклама. АНО ОБРАЗОВАТЕЛЬНАЯ АНО ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ СКАЕНГ, ИНН 9709022748, erid: LdtCKGzko
Please open Telegram to view this post
VIEW IN TELEGRAM
sky.pro
Онлайн-курс Аналитик данных: обучение с нуля с трудоустройством — цены на курсы в Skypro
Онлайн-курс по анализу данных с нуля от Skypro. Обучение аналитике данных с гарантией трудоустройства. Узнайте стоимость и получите доступ к первым урокам бесплатно!
❤4👎2⚡1👍1🔥1🙏1
GUI-комбайн для данных, который дружит с Python
Все, кто работает с данными, знают
Так вот, встречайте — LabPlot.
Если коротко: это бесплатный, опенсорсный и кроссплатформенный комбайн для визуализации и анализа данных.
«Фу, очередной GUI, зачем он нам, кодерам?» — спросите вы. А вот зачем:
1️⃣ Встроенные Computational Notebooks. Прямо внутри LabPlot можно работать с ноутбуками, которые поддерживают Python, R, Julia, Octave и др.
2️⃣ Прямая интеграция с Python-объектами. И это главная фишка. Вы можете прямо из ноутбука внутри LabPlot использовать свои
То есть, посчитали что-то сложное на Python — и тут же, без экспорта в CSV и прочих костылей, интерактивно повертели результат в удобном GUI.
Что ещё умеет:
- Кучу видов 2D-графиков (от гистограмм до Q-Q плотов).
- Регрессионный анализ, фиттинг кривых, сглаживание, Фурье.
- Импорт из десятков форматов (включая SAS, SPSS, MATLAB).
- Даже есть "цифровизатор графиков" для извлечения данных из картинок.
Понятно, что это не замена библиотекам, а скорее инструмент для интерактивного исследования.
#тулбокс
Все, кто работает с данными, знают
matplotlib/seaborn/plotly/etc, но иногда хочется просто взять данные и интерактивно покрутить их в удобном GUI. Особенно, когда нужно быстро что-то проанализировать, не написав 100500 строк кода для настройки графиков.Так вот, встречайте — LabPlot.
Если коротко: это бесплатный, опенсорсный и кроссплатформенный комбайн для визуализации и анализа данных.
«Фу, очередной GUI, зачем он нам, кодерам?» — спросите вы. А вот зачем:
NumPy массивы, pandas DataFrame'ы, списки и кортежи как источник данных для интерактивных графиков.То есть, посчитали что-то сложное на Python — и тут же, без экспорта в CSV и прочих костылей, интерактивно повертели результат в удобном GUI.
Что ещё умеет:
- Кучу видов 2D-графиков (от гистограмм до Q-Q плотов).
- Регрессионный анализ, фиттинг кривых, сглаживание, Фурье.
- Импорт из десятков форматов (включая SAS, SPSS, MATLAB).
- Даже есть "цифровизатор графиков" для извлечения данных из картинок.
Понятно, что это не замена библиотекам, а скорее инструмент для интерактивного исследования.
#тулбокс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🔥3 3⚡1
Топ по просмотрам
Топ по репостам 📥
Топ по реакциям
#итоги_месяца
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍2🔥1
🏛 Невидимое правительство Python
За каждым
❓ Вы знали, что:
▫️до PSF была провальная попытка №1, и язык чуть не погиб вместе с лопнувшим стартапом
▫️у фонда есть программа
▫️специальный совет
Листайте карточки и читайте небольшую статью: Невидимое правительство Python: кто платит за ваш pip install и владеет языком на самом деле◀️ ◀️
#так_сложилось
За каждым
pip install стоит мощный фонд (PSF), корпоративные деньги и юристы. ▫️до PSF была провальная попытка №1, и язык чуть не погиб вместе с лопнувшим стартапом
▫️у фонда есть программа
Developer-in-Residence — по сути, наём топовых core-разработчиков на фултайм, чтобы они разгребали завалы в CPython▫️специальный совет
Steering Council решает, какая фича попадёт в язык.Листайте карточки и читайте небольшую статью: Невидимое правительство Python: кто платит за ваш pip install и владеет языком на самом деле
#так_сложилось
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍2 2❤1
На этой недели мы узнали, что в Долине айтишники всё чаше кладут себя под нож, чтобы выглядеть моложе.
А как дела с этим обстоят у нас?
🧐 Приходилось ли вам сталкиваться с эйджизмом при поиске работы или в команде?
А как дела с этим обстоят у нас?
🧐 Приходилось ли вам сталкиваться с эйджизмом при поиске работы или в команде?
Anonymous Poll
2%
Да, в открытую намекали на возраст.
10%
Скорее да, между строк читалось «ищем помоложе».
13%
Нет, я пока молод и свеж (но коплю на ботокс 🤖 ).
13%
Нет, это всё байки, оценивают только скиллы.
9%
Сталкивался с обратным — «слишком молодой / неопытный»
0%
Я сам нанимаю, стараюсь брать помоложе.
54%
Просто жду срач в комментах 👀
👀5🤔2🐳1
Этот смешной ролик вышел уже давненько, но не теряет актуальности. Насколько за год мы приблизились к такой реальности? 🌚
К дедушке (бывшему программисту) приходит внучка с парнем. Но it's a trap, парень не совсем парень.
Будущее, которое мы заслужили.
#хих
К дедушке (бывшему программисту) приходит внучка с парнем. Но it's a trap, парень не совсем парень.
- Знаешь, я работал над распознаванием изображений, может быть в тебе есть часть моего кода.
- Возможно, но сейчас большая часть кода пишется ИИ, она непонятна людям. Хотя ваш код наверное тоже был непонятен людям.
Будущее, которое мы заслужили.
#хих
YouTube
AI Boyfriend
can't teach an old dev to love computer
// part of our live show: HOW TO SURVIVE THE AI APOCALYPSE
// featuring Alexis Gay: https://instagram.com/yayalexisgay
// more krazam scenes: https://www.patreon.com/KRAZAM
// https://instagram.com/krazam.tv…
// part of our live show: HOW TO SURVIVE THE AI APOCALYPSE
// featuring Alexis Gay: https://instagram.com/yayalexisgay
// more krazam scenes: https://www.patreon.com/KRAZAM
// https://instagram.com/krazam.tv…
👍3🔥3 2❤1
Воу, там в чат Qwen наконец-то завезли режим ризонинга в Qwen-3 Max. И без этого моделька держится в топе, не сильно уступая самым сильным игрокам.
Сейчас уже опенсорс, можно сказать, не проигрывает проприетарным моделям по паритету цены/качества.
Придётся немного менять план для стрима по сравнению чат-ботов 🌝
Сейчас уже опенсорс, можно сказать, не проигрывает проприетарным моделям по паритету цены/качества.
Придётся немного менять план для стрима по сравнению чат-ботов 🌝
👍7🔥2🙏1
Помните эксперимент с GitHub, о котором я писал 3 месяца назад? Энтузиаст дал GPT-4o сотку баксов и сказал: "Удиви меня, торгуя акциями".
И он удивил. За первый месяц уделал рынок в 12 раз.
А вот апдейт
• Портфель ChatGPT: +25.3%
• Рынок (S&P 500): +2.1%
• Портфель ChatGPT: -26.9% (осталось $73.14 от $100)
• Рынок (S&P 500): ~+7% за тот же период
Нейросеть не просто растеряла всё преимущество, а ушла в глубокий минус, пока рынок спокойно рос.
Что пошло не так?
Краткий ответ: жадность и биотехи. ИИ сделал ставку на сверхрисковые акции биотехнологических компаний в ожидании "катализаторов" (новостей об одобрении лекарств). Одна из таких ставок, на компанию ATYR, обвалилась почти на 80% за день, уничтожив большую часть прибыли.
Несмотря на провал, репозиторий проекта превратился в шикарный учебный полигон. Что там ценного сейчас:
simple_automation.py для автоматизации торговли через API OpenAI. Отличный пример для тех, кто хочет прикрутить LLM к своим задачам.pandas, анализируя, в какой момент стратегия "свернула не туда".Для тех, кто пропустил начало истории, все детали, первый код и промпты я разбирал в статье:
ChatGPT-трейдер: Как нейросеть за месяц превратила $100 в $125, обогнав рынок. Полный разбор с кодом и промптами.
Продолжаем следить или уже всё ясно?
#годный_опенсорс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍2⚡1❤1👏1🤔1🆒1
Алгоритмическая задачка на скорость ⚡️
Необходимо написать функцию, которая в качестве аргумента принимает строку и возвращает список из индексов этой строки, которые являются заглавными буквами. На первый взгляд — изи. Но дьявол, как всегда, в производительности. Нужно не просто "чтобы работало", а чтобы работало быстро.
Пример:
Кто напишет самую быструю реализацию для 5 миллионов прогонов?🧠
Гонять ваши решения будем на вот этом графоманском шедевре:
Вот вам скрипт для замеров:
Регулярки чур не использовать😛
#алгособес
Необходимо написать функцию, которая в качестве аргумента принимает строку и возвращает список из индексов этой строки, которые являются заглавными буквами. На первый взгляд — изи. Но дьявол, как всегда, в производительности. Нужно не просто "чтобы работало", а чтобы работало быстро.
Пример:
assert find_uppercase_indices("PyThOn") == [0, 2, 4]Кто напишет самую быструю реализацию для 5 миллионов прогонов?
Гонять ваши решения будем на вот этом графоманском шедевре:
О, Python, мой змей, вальяжный и сонный,
Чей GIL, как чиновник, поток держит однотонный.
Ты принял динамичность за высшую благость,
Теперь дебаггер ловит не баги, а гадость.
Твой дзен – это миф для наивных салаг,
Кто в лямбду запихнул трёхэтажный зигзаг.
В твоих "батарейках" – протухший компот,
Но пишешь на нём ты, и я, и вон тот.
Молясь на отступы, как на икону,
Мы кормим гигантскую IT-колонну.
Ты медленный, жирный, но хайп не унять...
Пойду-ка я дальше на Django гонять.
Вот вам скрипт для замеров:
import timeit
N_RUNS = 5_000_000
def find_uppercase_indices(text: str) -> list[int]:
# Тут будет ваша гениальная реализация
return indices
# Замеряем время
total_time = timeit.timeit(lambda: find_uppercase_indices(text), number=N_RUNS)
avg_time = total_time / N_RUNS
print(f"Общее время: {total_time:.4f} секунд")
print(f"Среднее время выполнения: {avg_time:.9f} секунд")
Регулярки чур не использовать
#алгособес
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2⚡1
Все ждут, что нейронки заменят джунов. Но свежий анализ 180 миллионов вакансий показывает: первый удар пришёлся не по новичкам, а по опытным "исполнителям".
Для начала, общий рынок вакансий просел на 8%. Это точка отсчёта, всё, что падает сильнее, — явный кандидат на вымирание.
Теория проста: ИИ даёт руководству доп. возможности, а ценность прослойки из мидлов-исполнителей, которые раньше просто переводили "хотелки" в ТЗ и код, начинает размываться.
• ML-инженеры: +40%. И это на фоне +78% в прошлом году. Вся инфраструктура под ИИ (инженеры дата-центров, робототехники) тоже в диком плюсе.
• Высшее руководство: Число вакансий для директоров, вице-президентов и C-level упало всего на 1.7%, в то время как для рядовых исполнителей — на 9%. ИИ даёт рычаги топам, позволяя им обходиться меньшим числом рук.
• Программисты: Вакансии в разработке ПО держатся около рыночного тренда. Нейронки не заменяют инженеров, а делают их продуктивнее. Ты либо решаешь более сложные задачи, либо тебя заменяет тот, кто решает. Но звоночек есть: небольшая просадка по фронтенду. Возможно, склепать простую админку или лендинг скоро станет задачей, которую полностью аутсорсят ИИ.
• Поддержка: Тоже мимо. Вакансии просели всего на 4%. Оказалось, что злого и растерянного клиента может успокоить только человек, а не бот.
🧠 Главный вывод
Если ваша работа — придумывать, принимать сложные решения, управлять и общаться с людьми, вы в относительной безопасности. Если ваша работа — выполнять чётко поставленные, шаблонные задачи, даже креативные, — вы в зоне риска.
ИИ усиливает сильных (топ-менеджеров, опытных инженеров) и вымывает тех, чью работу можно алгоритмизировать.
#рыночек_порешал
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2🔥2❤🔥1🙏1
Хватит гуглить "задачки по Python". Я уже всё сделал за вас 🔍
Устроим марафон бесплатных тренажеров! В моей подборке уже аж 20 сервисов.
Для начала вот 5 проверенных ресурсов, которые проведут вас от
1️⃣ Питонтьютор
Русскоязычная классика. Скорее интерактивный учебник, чем тренажер, но его практические задачки после каждой темы — лучший способ закрепить материал для новичка. Хорош для старта.
2️⃣ exercism
Много задач выстроены в единый учебный трек, который разделён на 17 разделов по концепциям языка. Уникальная фича: после решения задачи можно получить фидбэк от живого ментора.
3️⃣ CodeChick
Еще один хороший русскоязычный тренажер для начинающих. Задания начинаются с абсолютных азов, есть рейтинг и небольшие статьи для освоения синтаксиса.
4️⃣ futurecoder
Полностью опенсорсный проект, который развивается за счёт комьюнити. Пока проект небольшой, финальный проектик «Крестики-Нолики», ещё недавно добавили тему по словарям. Поэтому на текущем этапе подойдет только для начинающих.
5️⃣ Genepy
Платформа с открытым исходным кодом и более чем 100 упражнениями. Покрывает всё от print до работы с файлами и NumPy.
Завтра — подборка для тех, кому наскучила теория и хочется... поиграть.
#тулбокс
Устроим марафон бесплатных тренажеров! В моей подборке уже аж 20 сервисов.
Для начала вот 5 проверенных ресурсов, которые проведут вас от
print("Hello, World!") до уверенного владения базой.Русскоязычная классика. Скорее интерактивный учебник, чем тренажер, но его практические задачки после каждой темы — лучший способ закрепить материал для новичка. Хорош для старта.
Много задач выстроены в единый учебный трек, который разделён на 17 разделов по концепциям языка. Уникальная фича: после решения задачи можно получить фидбэк от живого ментора.
Еще один хороший русскоязычный тренажер для начинающих. Задания начинаются с абсолютных азов, есть рейтинг и небольшие статьи для освоения синтаксиса.
Полностью опенсорсный проект, который развивается за счёт комьюнити. Пока проект небольшой, финальный проектик «Крестики-Нолики», ещё недавно добавили тему по словарям. Поэтому на текущем этапе подойдет только для начинающих.
Платформа с открытым исходным кодом и более чем 100 упражнениями. Покрывает всё от print до работы с файлами и NumPy.
Завтра — подборка для тех, кому наскучила теория и хочется... поиграть.
#тулбокс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤8🎉2⚡1👏1
Разбор задачки по быстрому поиску индексов 🐍
Не могу не прокомментировать решение от @dZaeBesT:
Оно в разы переигрывает все остальные! Но... нет. Это просто обман бенчмарка🤭
- При первом вызове:
- При всех последующих вызовах:
По факту замеряется один честный прогон и куча молниеносных возвратов из кеша.
Но давайте посмотрим модификацию стандартного подхода с list compehension, которая даст небольшой прирост в скорости:
Тут хитрость в Numba — библиотеке, которая использует технологию Just-In-Time (JIT) компиляции.
Когда мы вызываем функцию, которая была декорирована с помощью @nb.jit, Numba компилирует эту функцию в машинный код, а затем, когда мы её вызываем снова, Numba использует уже скомпилированный машинный код, вместо того, чтобы компилировать его заново⚡️.
#алгособес
Не могу не прокомментировать решение от @dZaeBesT:
def find_uppercase_indices(text: str) -> list[int]:
import math
if type(math.pi) == float:
math.pi = [i for i, char in enumerate(text) if char.isupper()]
return math.pi
Оно в разы переигрывает все остальные! Но... нет. Это просто обман бенчмарка
- При первом вызове:
math.pi — это число (float). Условие if выполняется, код честно вычисляет список индексов и... перезаписывает math.pi этим списком!- При всех последующих вызовах:
math.pi — это уже list. Условие if становится ложным, и функция мгновенно возвращает уже готовый, сохраненный с первого раза результат.По факту замеряется один честный прогон и куча молниеносных возвратов из кеша.
Но давайте посмотрим модификацию стандартного подхода с list compehension, которая даст небольшой прирост в скорости:
import numba as nb
@nb.jit(nopython=True)
def find_uppercase_indices(text: str) -> list[int]:
return [i for i, char in enumerate(text) if char.isupper()]
Тут хитрость в Numba — библиотеке, которая использует технологию Just-In-Time (JIT) компиляции.
Когда мы вызываем функцию, которая была декорирована с помощью @nb.jit, Numba компилирует эту функцию в машинный код, а затем, когда мы её вызываем снова, Numba использует уже скомпилированный машинный код, вместо того, чтобы компилировать его заново⚡️.
#алгособес
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4❤2⚡2