Вопрос-Ответ

Is there a standardized method to swap two variables in Python?

Существует ли стандартизированный метод для замены двух переменных в Python?

В Python я видел, как значения двух переменных менялись местами с использованием этого синтаксиса:

left, right = right, left

Считается ли это стандартным способом замены значений двух переменных или существуют какие-то другие средства, с помощью которых две переменные по соглашению чаще всего меняются местами?

Переведено автоматически
Ответ 1

Python вычисляет выражения слева направо. Обратите внимание, что при вычислении присваивания правая часть вычисляется перед левой.


Документы Python: порядок вычисления


Это означает следующее для выражения a,b = b,a :


  • Вычисляется правая часть b,a, то есть в памяти создается кортеж из двух элементов. Два элемента - это объекты, обозначенные идентификаторами b и a, которые существовали до того, как команда была обнаружена во время выполнения программы.

  • Сразу после создания этого кортежа назначение этого объекта tuple по-прежнему не производилось, но это не имеет значения, Python внутренне знает, где он находится.

  • Затем вычисляется левая сторона, то есть кортеж присваивается левой стороне.

  • Поскольку левая часть состоит из двух идентификаторов, кортеж распаковывается для того, чтобы первый идентификатор a был присвоен первому элементу кортежа (который является объектом, который ранее был b перед заменой, потому что у него было имя b)
    , а второй идентификатор b присваивается второму элементу кортежа (который является объектом, который ранее был a перед заменой, потому что его идентификаторы были a)

Этот механизм эффективно поменял местами объекты, присвоенные идентификаторам a и b

Итак, отвечая на ваш вопрос: ДА, это стандартный способ замены двух идентификаторов на двух объектах.
Кстати, объекты - это не переменные, это объекты.

Ответ 2

Это стандартный способ замены двух переменных, да.

Ответ 3

Я знаю три способа замены переменных, но a, b = b, a это самый простой. Существует

XOR (для целых чисел)

x = x ^ y
y = y ^ x
x = x ^ y

Или кратко,

x ^= y
y ^= x
x ^= y

Временная переменная

w = x
x = y
y = w
del w

Замена кортежей

x, y = y, x
Ответ 4

Я бы не сказал, что это стандартный способ замены, потому что это вызовет некоторые неожиданные ошибки.

nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]

nums[i] сначала будет изменен , а затем повлияет на вторую переменную nums[nums[i] - 1].

python