Подсчёт и поиск минимума и максимума
Содержание курса
Сравнение ручного цикла и встроенных функций: когда что использовать
Разобрав оба подхода, можно сформулировать простой критерий выбора.
Если нужно работать со всем списком без фильтрации — 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.
Оба подхода не конкурируют — они решают разные задачи. Встроенные функции не заменяют цикл там, где нужна фильтрация, а ручной цикл не нужен там, где встроенная функция справляется без условий.
