Пропустить до содержимого

Как использовать минимальное значение в Python?

[

Python’s min() and max(): Нахождение минимального и максимального значений

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

В этом руководстве вы узнаете, как:

  • Использовать функции min() и max() для поиска минимального и максимального значения в ваших данных.
  • Вызывать min() и max() с одним итерируемым объектом или с любым количеством обычных аргументов.
  • Использовать min() и max() с строками и словарями.
  • Настраивать поведение min() и max() с помощью аргументов key и default.
  • Использовать генераторные выражения и компрехеншены в качестве аргументов для min() и max().

После того, как вы освоите этот материал, вы будете готовы написать несколько практических примеров, которые продемонстрируют применение min() и max(). Наконец, вы напишете свои собственные версии min() и max() на чистом Python, что поможет вам понять, как эти функции работают внутри.

Начало работы с функциями min() и max() в Python

Вызов min() и max() с одним итерируемым аргументом

Для использования функций min() и max() с одним итерируемым аргументом необходимо указать этот аргумент в скобках функции. Например:

numbers = [5, 2, 9, 7, 1]
min_value = min(numbers)
max_value = max(numbers)
print(f"Минимальное значение: {min_value}")
print(f"Максимальное значение: {max_value}")

Результатом выполнения этого кода будет:

Минимальное значение: 1
Максимальное значение: 9

Вызов min() и max() с несколькими аргументами

Функции min() и max() также могут быть вызваны с несколькими аргументами в виде отдельных значений. Например:

min_value = min(5, 2, 9, 7, 1)
max_value = max(5, 2, 9, 7, 1)
print(f"Минимальное значение: {min_value}")
print(f"Максимальное значение: {max_value}")

Результатом выполнения этого кода будет:

Минимальное значение: 1
Максимальное значение: 9

Использование min() и max() с строками и итерируемыми объектами строк

Функции min() и max() также могут использоваться с строками и итерируемыми объектами строк. Они будут работать, как будто каждый символ строки является отдельным элементом для сравнения. Например:

text = "Hello, world!"
min_char = min(text)
max_char = max(text)
print(f"Минимальный символ: {min_char}")
print(f"Максимальный символ: {max_char}")

Результатом выполнения этого кода будет:

Минимальный символ: ' '
Максимальный символ: 'w'

Обработка словарей с помощью min() и max()

Функции min() и max() могут также использоваться для обработки словарей. По умолчанию, функции будут искать минимальное или максимальное значение ключа словаря. Например:

prices = {"apple": 0.5, "banana": 0.25, "orange": 0.75}
min_key = min(prices)
max_key = max(prices)
print(f"Минимальное значение ключа: {min_key}")
print(f"Максимальное значение ключа: {max_key}")

Результатом выполнения этого кода будет:

Минимальное значение ключа: 'apple'
Максимальное значение ключа: 'orange'

Подгонка стандартного поведения min() и max() с использованием аргументов key и default

Функции min() и max() имеют необязательные аргументы key и default, которые позволяют вам настраивать их поведение. Аргумент key принимает функцию, которая будет применяться к каждому элементу перед сравнением. Аргумент default позволяет задать значение, которое будет возвращено, если итерируемый объект пуст. Например:

numbers = [5, 2, 9, 7, 1]
min_value = min(numbers, key=lambda x: x % 2) # наименьшее значение среди нечетных чисел
max_value = max(numbers, default=0) # максимальное значение, если пустой список
print(f"Минимальное значение: {min_value}")
print(f"Максимальное значение: {max_value}")

Результатом выполнения этого кода будет:

Минимальное значение: 1
Максимальное значение: 9

Использование min() и max() с генераторными выражениями и компрехеншенами

Функции min() и max() также могут быть вызваны с генераторными выражениями и компрехеншенами в качестве аргументов. Например:

numbers = [5, 2, 9, 7, 1]
min_value = min(x ** 2 for x in numbers) # наименьшее значение квадрата чисел
max_value = max(x ** 2 for x in numbers) # максимальное значение квадрата чисел
print(f"Минимальное значение: {min_value}")
print(f"Максимальное значение: {max_value}")

Результатом выполнения этого кода будет:

Минимальное значение: 1
Максимальное значение: 81

Применение функций min() и max() в деле

Теперь, когда вы знаете, как использовать min() и max(), можно рассмотреть несколько практических примеров, которые покажут, насколько полезны эти функции.

Удаление наименьшего и наибольшего чисел из списка

numbers = [5, 2, 9, 7, 1]
numbers.remove(min(numbers))
numbers.remove(max(numbers))
print(numbers)

Результатом выполнения этого кода будет:

[5, 2, 7]

Создание списков с минимальными и максимальными значениями

numbers = [5, 2, 9, 7, 1]
min_numbers = [x for x in numbers if x == min(numbers)]
max_numbers = [x for x in numbers if x == max(numbers)]
print(min_numbers)
print(max_numbers)

Результатом выполнения этого кода будет:

[1]
[9]

Ограничение значений до границ интервала

numbers = [5, 2, 9, 7, 1]
clipped_numbers = [min(max(x, 3), 7) for x in numbers] # ограничение значений от 3 до 7
print(clipped_numbers)

Результатом выполнения этого кода будет:

[5, 3, 7, 7, 3]

Поиск ближайших точек

points = [(2, 6), (5, 1), (3, 4), (8, 9)]
closest_points = min(points, key=lambda p: (p[0] ** 2 + p[1] ** 2) ** 0.5)
print(closest_points)

Результатом выполнения этого кода будет:

(5, 1)

Определение дешевых и дорогих товаров

products = {"apple": 0.5, "banana": 0.25, "orange": 0.75, "melon": 1.5}
cheapest_product = min(products, key=products.get)
expensive_product = max(products, key=products.get)
print(cheapest_product)
print(expensive_product)

Результатом выполнения этого кода будет:

banana
melon

Поиск взаимно простых целых чисел

import math
a = 42
b = 56
gcd = math.gcd(a, b)
coprime_numbers = [x for x in range(2, min(a, b)) if math.gcd(a, x) == 1 and math.gcd(b, x) == 1]
print(coprime_numbers)

Результатом выполнения этого кода будет:

[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53]

Измерение времени выполнения различных реализаций вашего кода

import time
def function_1():
time.sleep(1)
def function_2():
time.sleep(2)
def function_3():
time.sleep(3)
start_time = time.time()
min_function = min(function_1, function_2, function_3, key=lambda f: time.time() - start_time)
min_function()

Исследование роли методов .lt() и .gt() в min() и max()

Внутри функций min() и max() используются методы .lt() (less than) и .gt() (greater than) для сравнения элементов. Эти методы определяют, как сравнивать объекты с помощью операторов < и >. Например:

class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __lt__(self, other):
return self.price < other.price
def __gt__(self, other):
return self.price > other.price
products = [Product("apple", 0.5), Product("banana", 0.25), Product("orange", 0.75)]
cheapest_product = min(products)
expensive_product = max(products)
print(cheapest_product.name)
print(expensive_product.name)

Результатом выполнения этого кода будет:

banana
orange

Эмуляция функций min() и max() в Python

Вы также можете самостоятельно реализовать функции min() и max() на чистом Python. Это поможет вам лучше понять, как они работают внутри.

def custom_min(*args, key=None):
if not args:
raise ValueError("необходим хотя бы один аргумент")
iterator = iter(args[0])
if key is None:
return min(iterator)
return min(iterator, key=key)
def custom_max(*args, key=None):
if not args:
raise ValueError("необходим хотя бы один аргумент")
iterator = iter(args[0])
if key is None:
return max(iterator)
return max(iterator, key=key)

Теперь вы можете использовать эти функции точно так же, как и встроенные функции min() и max(). Например:

numbers = [5, 2, 9, 7, 1]
min_value = custom_min(numbers)
max_value = custom_max(numbers)
print(f"Минимальное значение: {min_value}")
print(f"Максимальное значение: {max_value}")

Результатом выполнения этого кода будет:

Минимальное значение: 1
Максимальное значение: 9

Выводы

Функции min() и max() в Python предоставляют удобные возможности для поиска наименьшего и наибольшего значений в данных. Они могут использоваться с различными типами данных, включая числа, строки и словари. Кроме того, вы можете настраивать их поведение с помощью аргументов key и default, а также использовать генераторные выражения и компрехеншены в качестве аргументов. Если вам нужно, вы даже можете реализовать свои собственные версии этих функций. Теперь у вас есть все необходимые знания, чтобы применять функции min() и max() в своих проектах Python.