python: использовать кортежи для переупорядочения содержимого списка - PullRequest
2 голосов
/ 20 марта 2012

Я начинающий питон. Недавно я увидел этот фрагмент кода:

>>> words = ['I', 'turned', 'off', 'the', 'spectroroute']
>>> words[2], words[3], words[4] = words[3], words[4], words[2]
>>> words
['I', 'turned', 'the', 'spectroroute', 'off']

Я запутался во 2-й строке. Кажется, используются кортежи, но я не понимаю, почему последовательность списка изменяется на результат?

Похоже, что вторая строка делает это:

>>> tmp = words[2]
>>> words[2] = words[3]
>>> words[3] = words[4]
>>> words[4] = tmp

Мой вопрос: почему код во 2-й строке меняет список в результате?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Список - это изменяемая структура данных. words[2] = 'foobar' изменит третий элемент в списке на 'foobar'. В

>>> words[2], words[3], words[4] = words[3], words[4], words[2]

сначала оценивается правая сторона, и результирующие строки назначаются различным позициям в списке, тем самым изменяя его.

1 голос
/ 20 марта 2012

Вы в значительной степени правы.Он создает кортеж справа (в памяти), а затем распаковывает его значения в исходный список, перезаписывая тем самым предыдущие индексы.Вот почему вам не нужна переменная tmp, поскольку она происходит в памяти.

Она похожа на эту концепцию:

a, b, c = (1, 2, 3)
...