Python функция подкачки не работает, используя индексный метод со списком = [1,2,3] - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь поменять местами элементы, используя python метод индекса списка, который вернул бы индекс элемента. Так что я могу поменять местами так, как мне нужно, используя известные элементы.

Вот код ...

a = [1,2,3,4,5,6]


a[a.index(1)],a[a.index(2)] = a[a.index(2)],a[a.index(1)]

output

>>>a
>>>[1,2,3,4,5,6]

И снова я попытался использовать элементы подкачки, и теперь вот вывод

a = [2,1,3,4,5,6]


a[a.index(1)],a[a.index(2)] = a[a.index(2)],a[a.index(1)]

вывод

>>> a
>>> [1,2,3,4,5,6]

with list [2,1,3,4,5,6]

Output with list [2,1,3,4,5,6]

вывод со списком [1,2,3,4,5,6] enter image description here

1 Ответ

1 голос
/ 17 февраля 2020

Это из-за Python порядка оценки и из-за того, что вы изменили список в середине этой оценки:

Для назначение, сначала оценивается RHS, слева направо:

# a = [1,2,3,4,5,6]
a[a.index(2)], a[a.index(1)] =>  2, 1

Теперь LHS оценивается слева направо. Итак, сначала:

# a = [1,2,3,4,5,6]
a[a.index(1)] => a[0] = 2
# now a = [2,2,3,4,5,6]

Обратите внимание, что теперь ( first ) индекс 2 равен 0 !!!

Следующая оценка:

# a = [2,2,3,4,5,6]
a[a.index(2)] => a[0] = 1
# now a = [1,2,3,4,5,6]

Таким образом, вы получите тот же список ...


Это также потому, что метод index() возвращает:

индекс первого вхождения x в с


Для второго списка RHS оценивается так же, но тогда на LHS у вас есть:

# a = [2,1,3,4,5,6]
a[a.index(1)] => a[1] = 2
# now a = [2,2,3,4,5,6]

А теперь:

# a = [2,2,3,4,5,6]
a[a.index(2)] => a[0] = 1
# now a = [1,2,3,4,5,6]

Так что вроде все нормально ...

...