Поменять местами min, max в списке
Коллеги, помогите разобраться.
Задача:
В списке поменять местами минимальное и максимальное значение.
Решение:
1 2 3 4 5
lst = list(map(int, input().split())) x = lst.index(max(lst)) y = lst.index(min(lst)) lst[x], lst[y] = lst[y], lst[x] print(*lst)
1 2 3
lst = list(map(int, input().split())) lst[lst.index(max(lst))], lst[lst.index(min(lst))] = lst[lst.index(min(lst))], lst[lst.index(max(lst))] print(*lst)
Первое решение работает, второе нет. В чем причина?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Min and Max в списке
Ребята, подскажите что не так. Нужно найти мин и макс число в списке, который вводит юзер. .

Определить min элемент каждой чётной строки матрицы двумерной;поменять местами max и min элементы
Два задания нужно вместе соединить, но у меня получается каша неработающая. 1.Определить.

Найти в массиве минимальный min и максимальный max элементы и поменять их местами
Задача 1. Заполнить одномерный массив (вектор) целыми случайными числами в диапазоне от v_min до.
В созданном списке Stuck поменять местами элементы, содержащие Max и Min значения
Помогите как это сделать. Как сформировать список я понял, но что сделать, чтобы найти и поменять.
4х5 random массив Найти min и max Поменять местами столбцы min и max
3) 4х5 random массив. найти min и max. поменять местами столбцы min и max. если min и max находятся.
Функции min и max в Python
В языке программирования Python есть встроенные функции поиска минимума и максимума. Им можно передавать как один объект, так и непосредственно множество однотипных объектов. Если передается один объект, то им может быть список, любая другая коллекция или итерируемый объект.
Если передается один список, то в нем находится минимум или максимум, которые возвращаются функциями min() и max() .
>>> a = [11,8,12,0] >>> min(a) 0 >>> max(a) 12
Если передается несколько списков, то целиком возвращается один из переданных списков. При этом сравнение происходит поэлементно: сначала сравниваются первые элементы списков. Если они не равны, то функция min() вернет тот список, первый элемент которого меньше, max() — наоборот. Если первые элементы равны, то будут сравниваться вторые и т. д.
>>> a = [11,8,12,0] >>> b = [11,7,123,9] >>> m = min(a,b) >>> print(m, type(m)) [11, 7, 123, 9] >>> c = [11,8,12] >>> min(a,c) [11, 8, 12]
Функциям min() и max() можно непосредственно передавать множество чисел:
>>> max(3, 8, -3, 12, 9) 12
Таким образом, если функции получают несколько объектов, то сравниваются сами объекты. И неважно какого они типа: списки, числа или что-то другое.
Однако нельзя передать числа и строки или смешанный список. В этом случае функция возвращает ошибку:
>>> s = ['a','d',1] >>> min(s) Traceback (most recent call last): File "", line 1, in TypeError: unorderable types: int() < str()
>>> s = ['a','d','ee'] >>> min(s) 'a'
В функциях min() и max() можно указать необязательный именной параметр key . Ему присваивается одноаргументная функция, которая выполняет какое-то предварительное действие над элементами списка.
>>> a = [8,-11,4,2,-5] >>> max(a) 8 >>> max(a,key=abs) -11
Здесь во втором случае находится максимум среди абсолютных значений чисел. То есть к каждому элементу списка применяется встроенная в Python функция abs . Однако применить ее к целым спискам нельзя:
>>> max(a,b,key=abs) Traceback (most recent call last): File "", line 1, in TypeError: bad operand type for abs(): 'list'
Поменять местами min/max в списке [дубликат]
Всем привет, пытаюсь поменять мин и макс местами в списке. Подскажите, пожалуйста, почему первый вариант работает, а второй нет? В чём тут подводный камень?
b = [5,4,3,2,1,10,12] i, j = b.index(min(b)), b.index(max(b)) b[i], b[j] = b[j], b[i]
b = [5,4,3,2,1,10,12] b[b.index(min(b))], b[b.index(max(b))] = b[b.index(max(b))], b[b.index(min(b))]
Отслеживать
25k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
задан 8 сен 2021 в 13:59
user457721 user457721
23 2 2 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Все дело в max и min :
b[b.index(min(b))], b[b.index(max(b))] = b[b.index(max(b))], b[b.index(min(b))]
- Когда вы присваиваете к b[b.index(min(b))] значение b[b.index(max(b))] , вы записываете максимальное значение вместо минимального.
- Далее в b[b.index(max(b))] вы ищете индекс максимального значения в списке, который вы присвоили в пункте 1, следовательно далее вы обратно присваиваете к максимальному значению минимальное из списка.
Здесь i, j = b.index(min(b)), b.index(max(b)) вы заранее записали индексы минимального и максимального значения, поэтому в b[i], b[j] = b[j], b[i] вы перезаписываете два значения списка по индексам между собой.
Отслеживать
ответ дан 8 сен 2021 в 14:24
Tehnorobot Tehnorobot
2,140 1 1 золотой знак 4 4 серебряных знака 13 13 бронзовых знаков
Пока писал код Tehnorobot всё объяснил, но вот если что проверка, что всё происходит именно так - сначала выполняется и присваивается то, что до запятой, в потом то, что после запятой. Для этого я написал вспомогательную функцию, которая печатает и возвращает значение, чтобы можно было отследить, что происходит:
def valprint(value): print(value) return value b = [5,4,3,2,1,10,12] b[b.index(min(valprint(b)))], b[b.index(max(valprint(b)))] = b[b.index(max(b))], b[b.index(min(b))]
[5, 4, 3, 2, 1, 10, 12] [5, 4, 3, 2, 12, 10, 12]
Как можно видеть, когда функция вызывается второй раз, то максимальное значение 12 уже стоит на том месте, где был до того минимум. Поэтому именно на это место и попадает обратно минимальное значение из списка - именно этот элемент находит b.index(max(b)) .
min и max из четырех
Задача.
Найти минимум и максимум четырёх данных чисел бeз использования массивов и циклов.
Может быть вы знаете еще какой-нибудь не слишком длинный алгоритм? Возможности Python не перестают удивлять.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
def mi (a, b) : # минимальное из двух mini = a if b mini : mini = b return mini def ma (a, b) : # максимальное из двух maxi = a if b > maxi : maxi = b return maxi def R () : # печать результата print ('min = ', mini, ', max = ', maxi, '.', sep = '') a, b, c, d = map (int, input \ ("Введите четыре числа в одной строке через пробел: ").split ()) # 1-ый алгоритм print ("\n1-ый алгоритм") mini = a if b mini : mini = b if c mini : mini = c if d mini : mini = d maxi = a if b > maxi : maxi = b if c > maxi : maxi = c if d > maxi : maxi = d R () # 2-ой алгоритм print ("\n2-ой алгоритм") mini = mi (mi (mi (a, b), c), d); maxi = ma (ma (ma (a, b), c), d); R () # 3-ий алгоритм print ("\n3-ий алгоритм") mini = min (a, b, c, d) maxi = max (a, b, c, d) R ()
