Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Не работает swap

#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]

Комментариев нет:

Отправить комментарий