2015-08-11 3 views
2

Предположим, у нас есть список номеров a, где все номера разные, и мы хотим поменять самый большой и самый маленький. Вопрос в том, почему этот код в Python:Python: почему код для замены самого большого и самого маленького числа не работает?

a[a.index(min(a))], a[a.index(max(a))] = a[a.index(max(a))], a[a.index(min(a))] 

не работает?

+1

Каков результат? –

+0

Ничего на самом деле. В списке нет изменений. –

ответ

7

Почему не получится? Возьмем в качестве примера a = [1, 2, 3, 4].

Во-первых, правая сторона оценивается:

a[a.index(max(a))], a[a.index(min(a))] => 4, 1 

Это кстати, конечно же, как

max(a), min(a) => 4, 1 

Далее, назначения произойдет, from left to right:

Во-первых, установка a[a.index(min(a))] в 4 делает список [4, 2, 3, 4], так как минимум спереди.

Затем, установка a[a.index(max(a))] в 1 делает список [1, 2, 3, 4] снова, так как максимум был написан спереди, так что там, где он находится сейчас и где 1 записывается.

+0

Отличный ответ! Знал, что это было что-то вроде этого, но искал какое-то время: P –

+0

Я ценю ваш ответ, спасибо! –

4

Лучше, чтобы получить индекс макс и мин первая:

i_min, i_max = a.index(min(a)), a.index(max(a)) 
a[i_min], a[i_max] = a[i_max], a[i_min] 

Другой результат способ может быть непредсказуемым)

Смежные вопросы