#python #swap
Не могу понять, почему не работает обмен переменных. Само задание: В списке все элементы различны. Поменяйте местами минимальный и максимальный элемент этого списка. a = [int(s) for s in input().split()] a[a.index(min(a))], a[a.index(max(a))] = a[a.index(max(a))], a[a.index(min(a))] print(' '.join([str(s) for s in a])) При вводе: 1 5 4 3 2, обмен не происходит. Помогите понять, почему?
Ответы
Ответ 1
Разбор полётов: Выражение a, b = c, d выполняется в следующем порядке - сначала вычисляется слева направо всё в правой части от знака =, потом вычисленные значения присваиваются переменным из левой части - тоже слева направо: c d a b Смотрим, что происходит: (c): ==> результат: 5 (d): ==> результат: 1 (a): ==> In [48]: a.index(min(a)) Out[48]: 0 In [49]: a[0] = 5 In [50]: a Out[50]: [5, 5, 4, 3, 2] (b): ==> In [51]: a.index(max(a)) Out[51]: 0 In [52]: a[0] = 1 In [53]: a Out[53]: [1, 5, 4, 3, 2] После шага 3: a == [5, 5, 4, 3, 2] Соответственно, на четвертом шаге a.index(max(a)) вернет 0 - первый встретившийся максимум. Далее вы присваиваете a[0] вычисленный заранее (шаг 2) минимум 1. Вуаля - все вернулось на свои места. Чтобы разрешить данный конфликт, надо сохранить индексы минимума и максимума, как это показано в ответе @S.Nick. Интересная деталь: ваше решение отработает правильно если максимальный элемент встречается до минимального: In [57]: a = [4, 3, 5, 1, 2] In [58]: a[a.index(min(a))], a[a.index(max(a))] = a[a.index(max(a))], a[a.index(min(a))] In [59]: a Out[59]: [4, 3, 1, 5, 2]Ответ 2
a = [int(s) for s in input().split()] 1 5 4 3 2 indMax, indMin = a.index(max(a)), a.index(min(a)) a[indMax], a[indMin] = a[indMin], a[indMax] print(a) [5, 1, 4, 3, 2]
Комментариев нет:
Отправить комментарий