Одна строчка кода, которая выдаёт в тебе новичка (или застрявшего в прошлом)
Серьезно, когда в следующий раз увижу в чужом коде🤨
Это не просто громоздко и неэффективно. Это маркер, который кричит: "Я мыслю как на Java/C, а не как на Python!". На одном из курсов, где я преподаю, во всех учебных материала так!🤦♂️
Есть же элегантный, читаемый и просто правильный способ —
Вот вам гайд, где всё по полочкам:
- Почему
- Как
- Про аргумент
- Про ошибку, из-за которой можно часами отлаживать код.
- И когда
🫱🏻 Читаем 🫲🏻
Серьезно, когда в следующий раз увижу в чужом коде
for i in range(len(...)):
, у меня глаз начнет дёргаться Это не просто громоздко и неэффективно. Это маркер, который кричит: "Я мыслю как на Java/C, а не как на Python!". На одном из курсов, где я преподаю, во всех учебных материала так!
Есть же элегантный, читаемый и просто правильный способ —
enumerate()
.Вот вам гайд, где всё по полочкам:
- Почему
range(len())
— это кринж и антипаттерн.- Как
enumerate()
делает код чище и понятнее.- Про аргумент
start
, чтобы не писать i + 1
.- Про ошибку, из-за которой можно часами отлаживать код.
- И когда
enumerate()
наоборот не нужен.🫱🏻 Читаем 🫲🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥9 3🙏2⚡1👎1🤔1💯1
🍕 Разбор задачки о доставке пиццы
Всем привет! Время разбирать задачку про курьеров и заказы. Задачка имеет очень лаконичное решение.
Самый математически красивый подход выглядит так:
🤔 Как это работает?
Давайте рассуждать по шагам.
1️⃣ Шаг 1: Все возможные перестановки.
Представим, что у нас есть
2️⃣ Шаг 2: Учитываем наше правило.
Главное правило:
Возьмём любую пару, например,
3️⃣ Шаг 3: Обобщаем на все пары.
У нас
Получаем финальную формулу:
- Сложность по времени:
- Сложность по памяти:
Всем привет! Время разбирать задачку про курьеров и заказы. Задачка имеет очень лаконичное решение.
Ключевая идея для решения большинства подобных задач — сначала посчитать все возможные варианты без ограничений, а затем "отсечь" те, которые нарушают наши правила.
Самый математически красивый подход выглядит так:
import math
def count_valid_orders(n: int) -> int:
return math.factorial(2 * n) // (2**n)
🤔 Как это работает?
Давайте рассуждать по шагам.
1️⃣ Шаг 1: Все возможные перестановки.
Представим, что у нас есть
2n
уникальных событий (P1, D1, P2, D2, ..., Pn, Dn
). Сколько всего существует способов расставить их в линию? Правильно, это просто перестановки, то есть (2n)!
.2️⃣ Шаг 2: Учитываем наше правило.
Главное правило:
Pi
всегда должно стоять раньше Di
.Возьмём любую пару, например,
(P1, D1)
. В общем числе перестановок (2n)!
ровно в половине случаев P1
будет стоять раньше D1
, а в другой половине — D1
раньше P1
. Нас устраивает только первый вариант. Значит, чтобы отсечь все неподходящие варианты для пары (P1, D1)
, нужно поделить общее число перестановок на 2.3️⃣ Шаг 3: Обобщаем на все пары.
У нас
n
таких независимых пар! Для каждой из них мы должны отсечь половину невалидных последовательностей. Поэтому мы делим общее число перестановок на 2 n
раз.Получаем финальную формулу:
(2n)! / 2^n
.- Сложность по времени:
O(N)
, так как вычисление факториала (2n)!
занимает линейное время от его аргумента.- Сложность по памяти:
O(1)
.Telegram
PythonTalk
Алгоритмическая задачка 🐍
Сегодня задачка на комбинаторику, завёрнутая в аппетитную обёртку.
Представьте, что вы разрабатываете алгоритм для новой службы доставки пиццы 🍕. Система должна планировать последовательность действий для курьеров.
Условие
У вас…
Сегодня задачка на комбинаторику, завёрнутая в аппетитную обёртку.
Представьте, что вы разрабатываете алгоритм для новой службы доставки пиццы 🍕. Система должна планировать последовательность действий для курьеров.
Условие
У вас…
❤4🔥3👍2⚡1🙏1
🍉 Как выбрать арбуз с помощью Python
Сезон арбузов в самом разгаре! Уже кушали? Если да, то точно столкнулись с извечной проблемой оптимизация процесса выбора арбуза.
Забываем дедовские методы, мы же не хотим полагаться на какую-то интуицию и субъективщину? В 21 веке такие важные решения должны приниматься исключительно на основе данных. Нам нужны метрики, пайплайны и воспроизводимые результаты!
Итак, представляю вам фреймворк
Этап 1: Сбор данных
Подходим к арбузному развалу. Наша задача — собрать первичный датасет. Для каждого экземпляра (
-
-
-
-
-
-
Этап 2: Препроцессинг и Feature Engineering
Сырые данные — мусор. Нам нужны производные признаки, которые действительно коррелируют с целевой переменной
Этап 3: Модель принятия решений (Decision Model)
Никаких
Итоговый алгоритм:
1. Подходите к развалу.
2. Достаете ноутбук, весы, рулетку, диктофон и палитру Pantone.
3. На недоумевающие взгляды продавца и других покупателей отвечаете: "Спокойно, я шарю".
4. Скрупулезно собираете датасет по 5-10 кандидатам.
5. Запускаете Jupyter-ноутбук, выполняете все ячейки.
6. Модель выдает вам
7. Покупаете его.
8. Дома разрезаете... а он неспелый.
Потому что ваша модель переобучилась на локальных данных, не учла сезонные дрифты и аномалии в поставке! Нужна MLOps-инфраструктура, постоянный мониторинг и версионирование моделей. В следующем году построим.
#хих
Сезон арбузов в самом разгаре! Уже кушали? Если да, то точно столкнулись с извечной проблемой оптимизация процесса выбора арбуза.
Забываем дедовские методы, мы же не хотим полагаться на какую-то интуицию и субъективщину? В 21 веке такие важные решения должны приниматься исключительно на основе данных. Нам нужны метрики, пайплайны и воспроизводимые результаты!
Итак, представляю вам фреймворк
Watermelon Driven Development (WDD)
.Этап 1: Сбор данных
Подходим к арбузному развалу. Наша задача — собрать первичный датасет. Для каждого экземпляра (
candidate
) нам нужны следующие фичи:-
weight
(float): Масса. Взвешиваем на местных весах. Если их нет — используем безмен или оцениваем на глаз, предварительно откалибровав руку на известном весе (например, на своем макбуке).-
volume
(float): Объем. Определяется методом погружения в таз с водой, но на рынке это может вызвать подозрения. Поэтому аппроксимируем до эллипсоида и считаем по формуле. Замеры делаем рулеткой.-
acoustic_response
(dict): Акустический отклик. Стучим по арбузу костяшкой пальца в трех разных точках (экватор, полюс №1, полюс №2). Записываем звук на диктофон. Позже прогоним через FFT-анализ для поиска резонансных частот.-
surface_pattern_complexity
(float): Сложность паттерна полосок. Фотографируем и прогоняем через простенькую CV-модель для оценки энтропии изображения. Чем контрастнее и четче полоски — тем выше метрика.-
peduncle_dryness_coefficient
(float): Коэффициент сухости хвостика. Значения от 0.0 (свежесрезанный, зеленый) до 1.0 (засохший, ломкий).-
stain_yellowness_index
(int): Индекс желтизны земляного пятна. Используем цветовую палитру Pantone для точной оценки. Градация от 1 (белый) до 10 (насыщенно-желтый).Этап 2: Препроцессинг и Feature Engineering
Сырые данные — мусор. Нам нужны производные признаки, которые действительно коррелируют с целевой переменной
sweetness_score
.def preprocess_watermelon_data(candidates: list) -> pd.DataFrame:
processed_data = []
for candidate in candidates:
# Плотность - ключевой показатель!
candidate['density'] = candidate['weight'] / candidate['volume']
# Анализируем звук: "звонкий" звук имеет пик в определенном диапазоне частот
fft_peaks = analyze_fft(candidate['acoustic_response'])
candidate['is_sound_ringing'] = 500 < fft_peaks.main_freq < 800
# Нормализуем остальные фичи
# ... (тут сложная математика)
processed_data.append(candidate)
return pd.DataFrame(processed_data)
Этап 3: Модель принятия решений (Decision Model)
Никаких
if-else
! Это слишком примитивно. Мы будем использовать взвешенную скоринговую модель. Веса подобраны на основе анализа тысяч арбузов (нет).# Веса фичей, подобранные экспертным путем в ходе A/B-теста
WEIGHTS = {
'density': 0.4,
'is_sound_ringing': 0.3,
'peduncle_dryness_coefficient': 0.15,
'stain_yellowness_index': 0.1,
'surface_pattern_complexity': 0.05,
}
def get_watermelon_score(candidate: pd.Series) -> float:
"""Рассчитывает итоговый скор для кандидата."""
score = 0
score += candidate['density'] * WEIGHTS['density']
score += candidate['is_sound_ringing'] * WEIGHTS['is_sound_ringing']
# ... и так далее для всех фичей
return score
# Выбираем арбуз с максимальным скором
best_watermelon = candidates_df.loc[candidates_df['score'].idxmax()]
Итоговый алгоритм:
1. Подходите к развалу.
2. Достаете ноутбук, весы, рулетку, диктофон и палитру Pantone.
3. На недоумевающие взгляды продавца и других покупателей отвечаете: "Спокойно, я шарю".
4. Скрупулезно собираете датасет по 5-10 кандидатам.
5. Запускаете Jupyter-ноутбук, выполняете все ячейки.
6. Модель выдает вам
id
лучшего арбуза.7. Покупаете его.
8. Дома разрезаете... а он неспелый.
Потому что ваша модель переобучилась на локальных данных, не учла сезонные дрифты и аномалии в поставке! Нужна MLOps-инфраструктура, постоянный мониторинг и версионирование моделей. В следующем году построим.
#хих
😁29 8🤣5❤3🔥3⚡1👍1👏1 1
Примеры функций для работы с файловой системой и файлами 🗂
🤡 Пока вы перевариваете этот баян, переварите ещё и немного полезной информации 🤓
– Что общего у программиста и пасечника?
– Импорт ос?
– import os
🤡 Пока вы перевариваете этот баян, переварите ещё и немного полезной информации 🤓
👍4🔥3😁2❤1🙏1👌1💯1🏆1👾1 1
У меня тоже такие мысли, конечно, периодически проскакивают, но я давно нашёл очень простой способ с этим бороться.
💬 Общайтесь с другими людьми!
Серьезно, кто постоянно в этом синдроме, вы вообще разговариваете с коллегами? 😅
Стоит мне пообсуждать с кем-то работу и любые другие профессиональные моменты, этот синдром очень быстро и надолго сдувает.
В "очередной раз" выясняется, что никто ни хрена не умеет, у всех везде велосипеды из говна и палок, вот-вот все рассыпится, сплошной треш и угар.
Главное — не получить синдром единственного адекватного человека в горящем дурдоме
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣14👍7😁5❤2🔥2🤪2 2⚡1👏1🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Погружаемся в Матрицу! 🤖
Вышла Matrix-Game 2.0 — интерактивная модель мира, которая в реальном времени (25 FPS!) генерирует окружение по командам с клавиатуры и мыши.
Проще говоря: вы жмете «W», и нейросеть на лету дорисовывает вам мир в стиле GTA или Minecraft, в котором вы движетесь вперед. Это уже не «сделай мне ролик», а «построй мне мир, я в нем поиграю».
Все это добро опенсорсное и на Python.
GTA VII уже будет полностью так генерироваться?🤔
Для тех, кто хочет попробовать — написал гайд по запуску у себя на машине, с разбором зависимостей и кода.
👉 Читать здесь
#щупаем_сорцы
Вышла Matrix-Game 2.0 — интерактивная модель мира, которая в реальном времени (25 FPS!) генерирует окружение по командам с клавиатуры и мыши.
Проще говоря: вы жмете «W», и нейросеть на лету дорисовывает вам мир в стиле GTA или Minecraft, в котором вы движетесь вперед. Это уже не «сделай мне ролик», а «построй мне мир, я в нем поиграю».
Все это добро опенсорсное и на Python.
GTA VII уже будет полностью так генерироваться?
Для тех, кто хочет попробовать — написал гайд по запуску у себя на машине, с разбором зависимостей и кода.
👉 Читать здесь
#щупаем_сорцы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤯3❤1🔥1😱1 1
❤3👍3👌2🙏1
Чего там, группу в Max 💩 уже надо переводить или ещё живём несколько месяцев?
Please open Telegram to view this post
VIEW IN TELEGRAM
Вводим «санкции» и «тарифы» на импорт Python-библиотек 🗽
Наткнулся на забавный пакет
И после этого в консоль выводится сообщение в стиле Трампа:
Это, конечно, 10/10 😂
Для тех, кто в теме, это абсолютно шикарная демонстрация monkey-patching'а
Вот сам репо◀️
Наткнулся на забавный пакет
tariff
. Он позволяет делать вот так:import tariff
# Вводим пошлины на "иностранные" пакеты
tariff.set({
"numpy": 50,
"pandas": 200,
})
# Теперь импорт будет медленнее...
import pandas
И после этого в консоль выводится сообщение в стиле Трампа:
JUST IMPOSED a 200% TARIFF on pandas! Original import took 87103 us, now takes 261309 us. American packages are WINNING AGAIN! #MIGA
Это, конечно, 10/10 😂
Для тех, кто в теме, это абсолютно шикарная демонстрация monkey-patching'а
builtins.__import__
.Вот сам репо
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣8❤4🤪3🔥1😁1
🎓Полный гайд по List Comprehensions в Python
В Python существует множество способов решить одну и ту же задачу, но не все они одинаково «питоничные». Классический подход к созданию списков через цикл
Именно для таких случаев и существуют списковые включения (List Comprehensions) — инструмент для создания списков в одну строку, декларативно и эффективно.
Эта статья поможет досконально разобраться в теме, от основ до неочевидных приемов. Внутри не только базовый синтаксис, но и продвинутые техники.
В общем, всё, что нужно, чтобы писать более чистый, выразительный и зачастую более быстрый код.
В Python существует множество способов решить одну и ту же задачу, но не все они одинаково «питоничные». Классический подход к созданию списков через цикл
for
и метод .append()
— яркий тому пример. Он работает, но часто бывает многословным и менее читаемым.Именно для таких случаев и существуют списковые включения (List Comprehensions) — инструмент для создания списков в одну строку, декларативно и эффективно.
Эта статья поможет досконально разобраться в теме, от основ до неочевидных приемов. Внутри не только базовый синтаксис, но и продвинутые техники.
В общем, всё, что нужно, чтобы писать более чистый, выразительный и зачастую более быстрый код.
This media is not supported in your browser
VIEW IN TELEGRAM
Anthropic выкатили интересный апдейт для Claude Code: теперь можно переключить режим вывода кода командой
1️⃣
2️⃣
Чтобы не брейнротить от копипасты любых ответов и для обучение — любопытный инструмент.
/output-styles
на режимы:1️⃣
Explanatory
: Claude не просто пишет код, а комментирует каждое свое решение. Почему выбрал именно такую архитектуру, какие были альтернативы, какие плюсы и минусы у подхода. По сути, это эмуляция опытного программиста, который сидит рядом и вслух проговаривает свой мыслительный процесс.2️⃣
Learning
: ИИ пишет код, а потом в ключевых местах останавливается, вставляет #TODO
и говорит: "а вот этот кусок допиши-ка сам". Как бы парное программирование с ментором, который заставляет тебя думать, а не тупо копипастить.Чтобы не брейнротить от копипасты любых ответов и для обучение — любопытный инструмент.
👍6🔥4🤔2❤1⚡1🙏1
Недавно The New York Times выпустила материал с говорящим заголовком «Goodbye, $165,000 Tech Jobs. Student Coders Seek Work at Chipotle».
Суть, если коротко: золотая лихорадка для джунов в США закончилась. Обещания про «выучи код и будешь получать шестизначную зарплату на старте», на которых выросло целое поколение, разбились о суровую реальность 2025 года.
Несколько фактов из статьи:
- Парень по имени Зак Тейлор с дипломом computer science подал заявки на 5762 вакансии. Результат: 13 собесов, 0 офферов.
- Девушка Манаси Мишра, отучившись на программиста, единственное интервью получила в сети фастфуда Chipotle.
- Уровень безработицы среди свежих выпускников CS — 6.1-7.5%. Это вдвое выше, чем у выпускников с дипломом по биологии или истории искусств. Истории искусств, Карл!
Винят в этом две вещи:
1️⃣ Массовые увольнения в бигтехах, которые перегрели рынок.
2️⃣ Распространение ИИ-инструментов, которые автоматизируют как раз ту самую работу начального уровня, на которую раньше брали джунов.
Более того, статья описывает «ИИ-петлю обреченности» (AI doom loop): соискатели используют ИИ, чтобы массово рассылать сотни резюме, а компании используют ИИ, чтобы так же массово их отсеивать. Выхлоп — нулевой. Нейронки собеседуют нейронки, а человек в этой схеме — лишний. Все как в образовании😂
Девушка из статьи, Манаси, работу в итоге нашла. Не программистом. А в технических продажах, куда пробилась благодаря своему TikTok-аккаунту.
До нас такие тренды доходят всегда с опозданием. Или нет?😄
Суть, если коротко: золотая лихорадка для джунов в США закончилась. Обещания про «выучи код и будешь получать шестизначную зарплату на старте», на которых выросло целое поколение, разбились о суровую реальность 2025 года.
Несколько фактов из статьи:
- Парень по имени Зак Тейлор с дипломом computer science подал заявки на 5762 вакансии. Результат: 13 собесов, 0 офферов.
- Девушка Манаси Мишра, отучившись на программиста, единственное интервью получила в сети фастфуда Chipotle.
- Уровень безработицы среди свежих выпускников CS — 6.1-7.5%. Это вдвое выше, чем у выпускников с дипломом по биологии или истории искусств. Истории искусств, Карл!
Винят в этом две вещи:
Более того, статья описывает «ИИ-петлю обреченности» (AI doom loop): соискатели используют ИИ, чтобы массово рассылать сотни резюме, а компании используют ИИ, чтобы так же массово их отсеивать. Выхлоп — нулевой. Нейронки собеседуют нейронки, а человек в этой схеме — лишний. Все как в образовании
Девушка из статьи, Манаси, работу в итоге нашла. Не программистом. А в технических продажах, куда пробилась благодаря своему TikTok-аккаунту.
До нас такие тренды доходят всегда с опозданием. Или нет?
Please open Telegram to view this post
VIEW IN TELEGRAM
NY Times
Goodbye, $165,000 Tech Jobs. Student Coders Seek Work at Chipotle.
As companies like Amazon and Microsoft lay off workers and embrace A.I. coding tools, computer science graduates say they’re struggling to land tech jobs.
🌚3😢2👨💻1 1 1