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

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

left, right = right, left

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

Ответ 1

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

http://docs.python.org/3/reference/expressions.html#evaluation-order

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

  • оценивается правая часть b,a, т.е. в памяти создается набор из двух элементов. Эти два элемента являются объектами, обозначенными идентификаторами b и a, которые существовали до того, как команда была задействована во время выполнения программы.
  • сразу после создания этого кортежа, никакого назначения этого кортежа еще не было сделано, но это не имеет значения, 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].

Ответ 5

Не работает для многомерных массивов, потому что здесь используются ссылки.

import numpy as np

# swaps
data = np.random.random(2)
print(data)
data[0], data[1] = data[1], data[0]
print(data)

# does not swap
data = np.random.random((2, 2))
print(data)
data[0], data[1] = data[1], data[0]
print(data)

См. также Обрезать фрагменты массивов Numpy

Ответ 6

Чтобы обойти проблемы, объясняемые eyquem, вы можете использовать модуль copy чтобы возвращать кортеж, содержащий (обращенные) копии значений, через функцию:

from copy import copy

def swapper(x, y):
  return (copy(y), copy(x))

Та же функция, что и у lambda:

swapper = lambda x, y: (copy(y), copy(x))

Затем присвойте им нужные имена, например:

x, y = swapper(y, x)

ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать deepcopy вместо copy.

Ответ 7

a=20
b=30
lambda a, b : b, a
print(a,b)

Ответ 8

как лямбда

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться этим ответом лямбда:

swapper = lambda x, y: (copy (y), copy (x)) Затем присвойте их нужным именам, например так:

x, y = swapper (y, x) ПРИМЕЧАНИЕ: если вы хотите, вы можете импортировать/использовать глубокую копию вместо копирования.

поделиться улучшить этот ответ