Алгоритмы обработки данных

Подсчёт и поиск минимума и максимума

Содержание курса

Сравнение ручного цикла и встроенных функций: когда что использовать

Разобрав оба подхода, можно сформулировать простой критерий выбора.

Если нужно работать со всем списком без фильтрации — sum(), min(), max(), len() справятся лучше. Они короче, читаются без усилий, и Python оптимизирует их внутри. Нет смысла писать цикл там, где готовая функция делает то же самое в одну строку.

Если нужен только подмножество элементов — тех, кто прошёл проверку, — встроенные функции не подходят. sum(scores) не знает, что вы хотите суммировать только оценки выше 70. min(scores) не умеет искать минимум среди отрицательных значений из списка, в котором есть и положительные. Здесь нужен ручной цикл с if.

Покажем это на одном и том же списке:

scores = [45, 82, 60, 91, 33, 78]

# Сумма всех оценок — встроенная функция справляется
total = sum(scores)
print(total)  # 389

# Сумма только тех оценок, что >= 70 — нужен цикл
high_total = 0
for score in scores:
    if score >= 70:
        high_total += score
print(high_total)  # 251  (82 + 91 + 78)

В первом случае условия нет — sum() закрывает задачу. Во втором условие есть — цикл необходим.

То же самое работает для подсчёта:

# Сколько всего оценок — len()
print(len(scores))  # 6

# Сколько оценок >= 70 — только цикл
count = 0
for score in scores:
    if score >= 70:
        count += 1
print(count)  # 3

И для поиска экстремума:

# Минимум по всему списку — min() достаточно
print(min(scores))  # 33

# Минимум только среди оценок >= 70 — цикл
current_min = None
for score in scores:
    if score >= 70:
        if current_min is None or score < current_min:
            current_min = score
print(current_min)  # 78

Здесь инициализируем current_min значением None, а не первым элементом списка — потому что мы заранее не знаем, какой элемент первым пройдёт фильтр. None — сигнал, что «подходящее значение ещё не найдено».

Практическое правило выглядит так:

  • Операция над всем списком → sum(), min(), max(), len().
  • Операция над частью списка по условию → ручной цикл с if.

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