Не совсем понимаю как работает метод max() в python
Есть список цифр:
a = ['7', '8', '3', '-5', '42', '-1', '0', '0', '-9', '49', '7', '4', '-4']
Если я сделаю:
print(max(a))
То получу ответ 8, хотя должно быть 49. Почему так?
Ответы (4 шт):
Потому что элементы списка имеют тип str а не int у вас два способа
либо добавить в список числа а не строки
a = [7, 8, 3, -5, 42, -1, 0, 0, -9, 49, 7, 4, -4]
print(max(a))
вывод:
49
либо ваш код преобразовать в int
a = ['7', '8', '3', '-5', '42', '-1', '0', '0', '-9', '49', '7', '4', '-4']
print(max(a, key = int))
вывод:
49
Можно и не преобразуя строковые значения получить правильную сортировку и взять максимум. Такое тоже бывает нужно. Но придётся использовать библиотеку, впрочем она часто уже стоит во многих дистрибутивах:
import natsort
a = ['7', '8', '3', '-5', '42', '-1', '0', '0', '-9', '49', '7', '4', '-4']
print(natsort.realsorted(a)[-1])
# 49
Находить максимум и минимум нужно среди типа данных int, или float.Правильно будет так
a = [7, 8, 3, -5, 42, -1, 0, 0, -9, 49, 7, 4, -4]
print(max(a))
Потому что элементы списка a - это строки, а не числа. Функция max сравнивает строки лексикографически (по алфавиту), поэтому она считает, что '7' > '8', а '8' > '3' и так далее. Чтобы получить максимальное число в списке, нужно преобразовать элементы списка в числа с помощью функции int:
a = [7, 8, 3, -5, 42, -1, 0, 0, -9, 49, 7, 4, -4]
print(max(a)) # 49
То же самое касается функции min. Чтобы получить минимальное число в списке, нужно также преобразовать элементы списка в числа:
a = [7, 8, 3, -5, 42, -1, 0, 0, -9, 49, 7, 4, -4]
print(min(a)) # -9
Вот несколько примеров:
Список чисел
numbers = [1, 2, 3, 4, 5, 6]
print(max(numbers)) # 6
print(min(numbers)) # 1
Список дробных чисел
decimals = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
print(max(decimals)) # 0.6
print(min(decimals)) # 0.1
Список строк
strings = ['a', 'b', 'c', 'd', 'e', 'f']
print(max(strings)) # 'f'
print(min(strings)) # 'a'
Список смешанных типов
mixed = ['a', 'b', 1, 2, 3, 'c']
print(max(mixed)) # 'c'
print(min(mixed)) # 1
Список с отрицательными числами
negatives = [-1, -2, -3, -4, -5, -6]
print(max(negatives)) # -1
print(min(negatives)) # -6
Если вам нужно найти максимальное или минимальное число в списке, состоящем из строк, то вы можете сначала преобразовать строки в числа с помощью функции int и затем вызвать функции max и min:
Список строк
a = ['7', '8', '3', '-5', '42', '-1', '0', '0', '-9', '49', '7', '4', '-4']
Преобразуем строки в числа
a = [int(x) for x in a]
print(max(a)) # 49
print(min(a)) # -9
Также можно использовать функцию map для преобразования строк в числа:
a = ['7', '8', '3', '-5', '42', '-1', '0', '0', '-9', '49', '7', '4', '-4']
a = list(map(int, a))
print(max(a)) # 49
print(min(a)) # -9
Также можно использовать функцию sorted, чтобы отсортировать список и получить максимальное и минимальное число:
a = ['7', '8', '3', '-5', '42', '-1', '0', '0', '-9', '49', '7', '4', '-4']
a = sorted([int(x) for x in a])
print(a[-1]) # 49 (последний элемент списка - это максимальное число)
print(a[0]) # -9 (первый элемент списка - это минимальное число)