PythonTalk
5.03K subscribers
1.61K photos
50 videos
6 files
1.38K links
Привет, меня зовут Олег Булыгин 👋

🐍 Здесь я делюсь полезной информацией для тех, кто пишет код на Python: от разработки до Data Science.

По вопросам: @obulygin91
Download Telegram
📦 Разбор задачи: инвентаризация на складе

Было предложено использовать множества, и это хорошая идея с точки зрения чистоты и читаемости кода.
Идея такая: создать эталонное множество всех номеров от 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]


Как это работает?

1️⃣ Фаза разметки:
- Мы проходим по списку nums один раз.
- Для каждого числа n мы берем его модуль abs(n) (на случай, если его уже сделали отрицательным) и вычисляем индекс index = abs(n) - 1.
- Этот index как раз соответствует "месту" числа n в отсортированном списке. Например, для числа 4 это будет индекс 3.
- Мы "помечаем" ячейку nums[index], делая ее отрицательной. Если она уже отрицательная, ничего не трогаем.

Пример: Встретили 4. Идем в nums[3] и меняем знак у числа, которое там лежит.

2️⃣ Фаза сбора:
- После первого прохода в списке 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
Сегодня #квиз для расслабления 🤤
👍73🔥2
😭16👍64🔥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
4👎21👍1🔥1🙏1
GUI-комбайн для данных, который дружит с Python

Все, кто работает с данными, знают matplotlib/seaborn/plotly/etc, но иногда хочется просто взять данные и интерактивно покрутить их в удобном GUI. Особенно, когда нужно быстро что-то проанализировать, не написав 100500 строк кода для настройки графиков.

Так вот, встречайте — LabPlot.

Если коротко: это бесплатный, опенсорсный и кроссплатформенный комбайн для визуализации и анализа данных.

«Фу, очередной GUI, зачем он нам, кодерам?» — спросите вы. А вот зачем:

1️⃣ Встроенные Computational Notebooks. Прямо внутри LabPlot можно работать с ноутбуками, которые поддерживают Python, R, Julia, Octave и др.

2️⃣ Прямая интеграция с Python-объектами. И это главная фишка. Вы можете прямо из ноутбука внутри LabPlot использовать свои NumPy массивы, pandas DataFrame'ы, списки и кортежи как источник данных для интерактивных графиков.

То есть, посчитали что-то сложное на Python — и тут же, без экспорта в CSV и прочих костылей, интерактивно повертели результат в удобном GUI.

Что ещё умеет:
- Кучу видов 2D-графиков (от гистограмм до Q-Q плотов).
- Регрессионный анализ, фиттинг кривых, сглаживание, Фурье.
- Импорт из десятков форматов (включая SAS, SPSS, MATLAB).
- Даже есть "цифровизатор графиков" для извлечения данных из картинок.

Понятно, что это не замена библиотекам, а скорее инструмент для интерактивного исследования.

#тулбокс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥331
🗓 Итоги месяца (октябрь 2025)

Топ по просмотрам 👀
1️⃣ Новое интервью Гвидо ван Россума.
2️⃣ Прогноз сенатора США Берни Сандерса, как ИИ будет уничтожать рынок труда.
3️⃣ Исследование hh.ru, в котором айтишники потеряли первенство в звании престижной профессии.

Топ по репостам 📥
1️⃣ Бесплатный курс по Deep Learning от Стэнфорда.
2️⃣ Статистика по рынку труда в IT по итогам третьего квартала.
3️⃣ Проект nanochat Андрея Карпаты — сборка клона GPT за 100$.

Топ по реакциям 👍
1️⃣ И тут интервью Гвидо!
2️⃣ История о том, как Python победил язык R.
3️⃣ Как морж сверг создателя Python.

#итоги_месяца
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2🔥1
🏛 Невидимое правительство Python

За каждым 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👍221
На этой недели мы узнали, что в Долине айтишники всё чаше кладут себя под нож, чтобы выглядеть моложе.
А как дела с этим обстоят у нас?
🧐 Приходилось ли вам сталкиваться с эйджизмом при поиске работы или в команде?
Anonymous Poll
2%
Да, в открытую намекали на возраст.
10%
Скорее да, между строк читалось «ищем помоложе».
13%
Нет, я пока молод и свеж (но коплю на ботокс 🤖).
13%
Нет, это всё байки, оценивают только скиллы.
9%
Сталкивался с обратным — «слишком молодой / неопытный»
0%
Я сам нанимаю, стараюсь брать помоложе.
54%
Просто жду срач в комментах 👀
👀5🤔2🐳1
Этот смешной ролик вышел уже давненько, но не теряет актуальности. Насколько за год мы приблизились к такой реальности? 🌚

К дедушке (бывшему программисту) приходит внучка с парнем. Но it's a trap, парень не совсем парень.

- Знаешь, я работал над распознаванием изображений, может быть в тебе есть часть моего кода.
- Возможно, но сейчас большая часть кода пишется ИИ, она непонятна людям. Хотя ваш код наверное тоже был непонятен людям.


Будущее, которое мы заслужили.

#хих
👍3🔥321
Воу, там в чат Qwen наконец-то завезли режим ризонинга в Qwen-3 Max. И без этого моделька держится в топе, не сильно уступая самым сильным игрокам.

Сейчас уже опенсорс, можно сказать, не проигрывает проприетарным моделям по паритету цены/качества.

Придётся немного менять план для стрима по сравнению чат-ботов 🌝
👍7🔥2🙏1
🤑 ChatGPT-трейдер: от +25% к полному провалу за 3 месяца.

Помните эксперимент с 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% за день, уничтожив большую часть прибыли.

Несмотря на провал, репозиторий проекта превратился в шикарный учебный полигон. Что там ценного сейчас:
1️⃣ Код: Проект оброс новыми скриптами. Появился simple_automation.py для автоматизации торговли через API OpenAI. Отличный пример для тех, кто хочет прикрутить LLM к своим задачам.
2️⃣ Промпты: Автор кардинально переработал промпты. Вместо простых инструкций — теперь детальные системные сообщения с ролями, правилами и жёсткой структурой ответа (JSON).
3️⃣ Данные: Весь путь — от взлёта до падения — задокументирован в CSV. Можно скачать и поковырять в pandas, анализируя, в какой момент стратегия "свернула не туда".

Для тех, кто пропустил начало истории, все детали, первый код и промпты я разбирал в статье:
ChatGPT-трейдер: Как нейросеть за месяц превратила $100 в $125, обогнав рынок. Полный разбор с кодом и промптами. ◀️◀️

Продолжаем следить или уже всё ясно? 😏

#годный_опенсорс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍211👏1🤔1🆒1
Алгоритмическая задачка на скорость ⚡️

Необходимо написать функцию, которая в качестве аргумента принимает строку и возвращает список из индексов этой строки, которые являются заглавными буквами. На первый взгляд — изи. Но дьявол, как всегда, в производительности. Нужно не просто "чтобы работало", а чтобы работало быстро.

Пример: 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🔥21
🔪 Кого первого сожрёт ИИ? Разбор 180 млн вакансий.

Все ждут, что нейронки заменят джунов. Но свежий анализ 180 миллионов вакансий показывает: первый удар пришёлся не по новичкам, а по опытным "исполнителям".

Для начала, общий рынок вакансий просел на 8%. Это точка отсчёта, всё, что падает сильнее, — явный кандидат на вымирание.

📉 Кого ИИ начал вытеснять уже сейчас?

1️⃣ Креативные исполнители (3D-художники, копирайтеры) летят вниз на 30%. А вот креативные директора, которые ставят задачи и определяют стратегию, — почти на месте. Чувствуете разницу?
2️⃣ Но главный раскол — по грейдам. Вакансии для рядовых спецов (IC) упали на 9%. А для топ-менеджмента (директора, VP) — всего на 1.7%.
Теория проста: ИИ даёт руководству доп. возможности, а ценность прослойки из мидлов-исполнителей, которые раньше просто переводили "хотелки" в ТЗ и код, начинает размываться.

📈 А кто растёт и чувствует себя отлично?

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
👍102🔥2❤‍🔥1🙏1
Хватит гуглить "задачки по Python". Я уже всё сделал за вас 🔍

Устроим марафон бесплатных тренажеров! В моей подборке уже аж 20 сервисов.

Для начала вот 5 проверенных ресурсов, которые проведут вас от print("Hello, World!") до уверенного владения базой.

1️⃣ Питонтьютор
Русскоязычная классика. Скорее интерактивный учебник, чем тренажер, но его практические задачки после каждой темы — лучший способ закрепить материал для новичка. Хорош для старта.

2️⃣ exercism
Много задач выстроены в единый учебный трек, который разделён на 17 разделов по концепциям языка. Уникальная фича: после решения задачи можно получить фидбэк от живого ментора.

3️⃣ CodeChick
Еще один хороший русскоязычный тренажер для начинающих. Задания начинаются с абсолютных азов, есть рейтинг и небольшие статьи для освоения синтаксиса.

4️⃣ futurecoder
Полностью опенсорсный проект, который развивается за счёт комьюнити. Пока проект небольшой, финальный проектик «Крестики-Нолики», ещё недавно добавили тему по словарям. Поэтому на текущем этапе подойдет только для начинающих.

5️⃣ Genepy
Платформа с открытым исходным кодом и более чем 100 упражнениями. Покрывает всё от print до работы с файлами и NumPy.

Завтра — подборка для тех, кому наскучила теория и хочется... поиграть.

#тулбокс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥138🎉21👏1
Разбор задачки по быстрому поиску индексов 🐍

Не могу не прокомментировать решение от @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🔥422