Min: примеры (PYTHON)
min(iterable[, key] or [arg1, arg2,...]): AnyБазовая информация о функции min
Функция min в Python возвращает наименьший элемент из переданных аргументов или минимальный элемент итерируемого объекта. Её используют для сравнения значений, поиска минимального элемента в коллекциях, а также в комбинации с ключевыми функциями для сложных сравнений.
Синтаксис функции имеет две формы:
- min(iterable, *[, key, default]) – с одним итерируемым аргументом
- min(arg1, arg2, *args[, key]) – с двумя или более позиционными аргументами
Параметры:
- iterable – итерируемый объект (список, кортеж, строка, словарь и др.).
- arg1, arg2, ... args – позиционные аргументы для сравнения (минимум два).
- key – однопараметрическая функция, применяемая к каждому элементу перед сравнением (опционально).
- default – значение, возвращаемое если итерируемый объект пуст (только для формы с iterable).
Возвращаемое значение: Наименьший элемент среди переданных. При пустом итерируемом объекте без указания default возникает исключение ValueError.
Базовые примеры использования
Работа с различными типами данных и параметрами.
Пример с числами:
print(min(5, 2, 8))2
Пример со строковыми значениями:
print(min(['apple', 'banana', 'cherry']))apple
Использование ключевой функции key:
words = ['cat', 'wolf', 'elephant']
print(min(words, key=len))cat
Применение параметра default:
empty_list = []
print(min(empty_list, default='Нет данных'))Нет данных
Альтернативные функции в Python
max() – находит максимальный элемент, использует аналогичные параметры. Выбор между min и max зависит от задачи поиска минимального или максимального значения.
sorted() и heapq.nsmallest() – при необходимости получения нескольких минимальных элементов или отсортированной последовательности. Функция sorted возвращает новый отсортированный список, а heapq.nsmallest эффективна для больших данных.
Специализированные методы – например, DataFrame.min() в библиотеке pandas для работы с табличными данными. Используют при анализе данных в структурах DataFrame.
Аналоги функции в других языках
JavaScript: Math.min() работает только с числами, не поддерживает ключевые функции.
console.log(Math.min(5, 2, 8));2
PHP: min() поддерживает массивы и списки аргументов, но без параметра key.
echo min([5, 2, 8]);2
Java: Collections.min() работает с коллекциями, требует реализации Comparable или Comparator.
List numbers = Arrays.asList(5, 2, 8);
System.out.println(Collections.min(numbers)); 2
SQL: агрегатная функция MIN() применяется в запросах к столбцам таблиц.
SELECT MIN(price) FROM products;C#: метод Enumerable.Min() в LINQ, имеет перегрузки с ключевым селектором.
int[] numbers = {5, 2, 8};
Console.WriteLine(numbers.Min());2
Lua: стандартной функции нет, обычно реализуют через цикл или используют math.min для чисел.
Go: отсутствие встроенной функции требует ручной реализации или использования пакетов.
Kotlin: minOrNull() и minBy() для коллекций, аналогичны Python по функциональности.
Типичные ошибки при использовании
Передача пустого итерируемого объекта без параметра default:
min([])ValueError: min() arg is an empty sequence
Сравнение несовместимых типов данных:
min([1, 'a', 3])TypeError: '<' not supported between instances of 'str' and 'int'
Неверное использование key-функции, возвращающей None:
min([1, 2, 3], key=lambda x: None)TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'
Ошибочная передача key как позиционного аргумента:
min([1, 2, 3], len)TypeError: 'int' object is not callable
Изменения в последних версиях Python
В Python 3.4 добавлен параметр default для обработки пустых итерируемых объектов без возникновения ValueError.
До Python 3.8 функция min не поддерживала использование ключевого параметра default при вызове с несколькими позиционными аргументами. Сейчас это поведение единообразно.
Оптимизации внутренней реализации в Python 3.11 улучшили производительность функции для некоторых типов данных.
Расширенные примеры применения
Поиск слова с минимальным ASCII-суммой кодов символов:
words = ['python', 'java', 'c++']
min_word = min(words, key=lambda w: sum(ord(c) for c in w))
print(min_word)c++
Работа с объектами пользовательских классов:
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __repr__(self):
return f'{self.name}: {self.price}'
products = [Product('Book', 15), Product('Pen', 3), Product('Notebook', 8)]
print(min(products, key=lambda p: p.price))Pen: 3
Использование с генераторами и большими данными:
import random
gen = (random.randint(1, 1000) for _ in range(100000))
print(min(gen))1
Одновременное применение min и max с одинаковой key-функцией:
data = ['a', 'bb', 'ccc', 'dddd']
shortest = min(data, key=len)
longest = max(data, key=len)
print(f'Короткое: {shortest}, Длинное: {longest}')Короткое: a, Длинное: dddd
Поиск минимального значения в словаре по ключам или значениям:
prices = {'apple': 50, 'banana': 30, 'orange': 45}
print(min(prices)) # По ключам
print(min(prices, key=lambda k: prices[k])) # По значениямapple banana