Неожиданное поведение подкачки в списке питонов - PullRequest
0 голосов
/ 05 июля 2018

Здесь я хочу поменять 4 и 2 в данном списке с помощью индексов и, следовательно, я пишу следующий код.

>>>arr = [4,3,1,2]
>>> arr[0] , arr[arr[0]-1] = arr[arr[0]-1] ,arr[0]
>>> arr
[2, 4, 1, 2]

Приведенный выше код дает неожиданный вывод, как вы можете видеть. Ожидаемый выход составил [2,3,1,4].

Но когда я пишу как

>>>arr = [4,3,1,2]
>>>index = arr[0] - 1
>>>arr[0] , arr[index] = arr[index] ,arr[0]
>>>arr
[2, 3, 1, 4]

Выходная информация соответствует ожидаемой.

Почему это?

Edit: Да, есть другой способ поменять местами первый и последний элемент. У меня была необходимость выбрать этот подход, после чего я столкнулся с этим ненормальным поведением. Для которого я еще не нашел никакого объяснения

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Обратные индексы в Python должны быть заданы как -num:

>>> arr = [4,3,1,2]
>>> arr[0] , arr[-1] = arr[-1] ,arr[0]
>>> arr
[2, 3, 1, 4]
0 голосов
/ 05 июля 2018
arr[0], arr[-1] = arr[-1], arr[0]

По-видимому, оба кортежа оцениваются слева направо параллельно, и оценка второго элемента кортежа LHS выполняется последовательно после перехода к первому элементу, поэтому назначение первого элемента кортежу LHS вызывает даже другую ссылку быть его вторым элементом.

...