Proglib.academy | IT-курсы
3.67K subscribers
1.93K photos
56 videos
10 files
1.81K links
Онлайн-курсы для программистов от создателей «Библиотеки программиста».

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9f60aed6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
🧠 От конкурентного программирования к производству

Есть проекты, где смена всего одного неудачного алгоритма в корне меняет картину. Внезапно запросы начинают выполняться за миллисекунды, а пользователи перестают жаловаться на «тормоза». Обычно такие решения находят программисты, которые участвовали в соревнованиях по спортивному программированию.

➡️ Сегодня рассказываем, почему их мышление помогает в реальной работе.

Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
📌 How to: заменить break в Python-циклах на элегантные альтернативы

В Python break в циклах for прерывает итерацию, но часто есть более читаемые и лаконичные способы. Разберём типичные случаи и их альтернативы.

1️⃣ Проверка наличия элемента

Классика с break:
color_options = ["blue", "green", "purple"]
is_purple_an_option = False
for color in color_options:
if color == "purple":
is_purple_an_option = True
break


Альтернатива — оператор in:
is_purple_an_option = "purple" in color_options

in работает со всеми итерируемыми объектами, а для set и dict ещё и быстрее, чем цикл.

2️⃣ Проверка условия для элементов

Пример с break:
points_per_user = [3, 12, 28, 105]
anyone_has_100 = False
for points in points_per_user:
if points > 100:
anyone_has_100 = True
break


Альтернатива — any:
anyone_has_100 = any(points > 100 for points in points_per_user)

any (или all для "все элементы") делает код выразительнее.

3️⃣ Поиск первого подходящего значения

С break:
words = ["Look", "at", "these", "excellent", "words"]
first_long_word = None
for word in words:
if len(word) > 4:
first_long_word = word
break


Альтернатива — next с генератором:
long_words = (word for word in words if len(word) > 4)
first_long_word = next(long_words, None)

next берёт первый элемент из генератора, а None — значение по умолчанию, если ничего не найдено.

4️⃣ Сбор элементов до условия

С break:
items = ["chair", "desk", "", "lamp"]
before_blank = []
for item in items:
if not item:
break
before_blank.append(item)


Альтернатива — itertools.takewhile:
from itertools import takewhile
before_blank = list(takewhile(bool, items))

takewhile собирает элементы, пока условие истинно, и возвращает итератор.

📍 Итог

break полезен, но часто его можно заменить:
in — для проверки наличия
any/all — для условий
next — для поиска первого значения
takewhile — для сбора до условия

⤵️ А как вы обходитесь без break?

Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
🔥 Как НЛМК отслеживает ковши с расплавленным чугуном — и зачем это нужно

Раньше ковши искали по рации. Сегодня — за ними следит цифровая система: знает, где каждый ковш, сколько в нём чугуна, куда он движется и не перегрелась ли футеровка.

В новом кейсе рассказываем:
— почему стандартные RFID-метки плавились и что сделали вместо
— как устроена цифровая модель предприятия
— что даёт это внедрение: меньше простоев, теплопотерь и аварий

👷‍♂️ Спойлер: теперь даже ковши «думают».

📌 Читать: https://proglib.io/sh/mXKzViUZen

Proglib Academy #буст
1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🔹 How to: как работают генераторы в Python

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

➡️ Принцип работы
Вместо возврата всех значений сразу, генератор использует yield, который приостанавливает выполнение функции, сохраняя её состояние:
def simple_generator():
print("Первый yield")
yield 1
print("Второй yield")
yield 2

gen = simple_generator()
print(next(gen)) # Первый yield → 1
print(next(gen)) # Второй yield → 2


При вызове next() выполнение продолжается с места, где остановилось. Это позволяет работать с последовательностями, не загружая их полностью в память.

➡️ Пример: Фибоначчи на генераторах
def fibonacci_generator(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b


Такой генератор можно использовать для обработки больших последовательностей без лишних затрат памяти.

➡️ Генераторы vs. списки
Генераторы экономят память, так как не хранят все элементы в памяти:
import sys

def list_numbers(n):
return [i for i in range(n)]

def generator_numbers(n):
return (i for i in range(n))

print(sys.getsizeof(list_numbers(1000000))) # 8448728 байт
print(sys.getsizeof(generator_numbers(1000000))) # 208 байт


Разница очевидна: генератор занимает всего 208 байт, тогда как список — 8+ мегабайт!

➡️ Генераторные выражения
Аналогично списковым включениям, но работают лениво:
squares_list = [x * x for x in range(10)]  # Обычный список
squares_gen = (x * x for x in range(10)) # Генератор


➡️ Комбинирование генераторов
С помощью itertools генераторы можно объединять и фильтровать:
from itertools import chain, filterfalse

result = chain((x * x for x in range(10)), (y + 10 for y in range(5)))
odd_squares = filterfalse(lambda x: x % 2 == 0, (x * x for x in range(10)))



➡️ Когда использовать генераторы
— Обработка больших данных без перегрузки памяти
— Потоковая обработка (например, чтение файлов)
— Создание бесконечных последовательностей
— Оптимизация скорости и эффективности кода

Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
🤖 Знаете, чем настоящий AI отличается от чат-бота?

Чат-бот просит перезагрузить роутер, а настоящий AI уже умеет читать ваши эмоции в чате, включать музыку под ваше настроение, контролировать погрузку руды с точностью Терминатора и даже находить на КТ-снимках то, чего не заметит человеческий глаз.

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

Наш новый курс по ML — это не волшебная таблетка. Это честный и структурированный путь в мир Data Science. Мы дадим вам базу, с которой вы:

разберётесь, как мыслят машины (спойлер: матрицами!);

научитесь строить работающие модели, а не карточные домики;

получите трамплин для прыжка в Deep Learning.

Хватит смотреть, как другие запускают ракеты. Пора строить свой собственный космодром.

Начните с фундамента на нашем курсе по Machine Learning!
🫡 Microsoft уволила 200 сотрудников King

— Их заменил ИИ, который они же и обучали.

Как вам такой поворот?👇

Proglib Academy #развлекалово
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3😢1
🔥 Знакомьтесь, преподаватель нашего нового курса по ML — Мария Жарова.

В карточках рассказали, чем Мария занимается и какие советы даёт тем, кто хочет расти в IT и Data Science ☝️

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

👉 Записывайтесь на курс
1🔥1
👍 Пиши код, чтобы он не тормозил

Алгоритмы — не «для олимпиадников». Это то, что делает твой код быстрым.
Не на 5%, а в 10–100 раз.

Вот что реально помогает:

— выбрал другой алгоритм — и лагов нет,
— думаешь про сложность — и не пишешь мусор,
— знаешь про Trie, префиксные суммы, LRU — и у тебя всё летает.

Не гадай, где узкое место. Мерь. Оптимизируй. Ускоряй.

➡️ Вот статья, после которой кодят с умом:
https://proglib.io/sh/BZ6EzqDbaW

Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🙏1