En Python, he visto dos valores variables intercambiados usando esta sintaxis:
left, right = right, left
¿Se considera esta la forma estándar de intercambiar dos valores de variables o hay algún otro medio por el cual dos variables se intercambian por convención más habitualmente?
python
syntax
swap
conventions
WilliamKF
fuente
fuente

Respuestas:
Eso significa lo siguiente para la expresión
a,b = b,a:b,ase evalúa el lado derecho , es decir, se crea una tupla de dos elementos en la memoria. Los dos elementos son los objetos designados por los identificadoresbya, que existían antes de que se fomente la instrucción durante la ejecución del programa.ase asigne al primer elemento de la tupla (que es el objeto que antes era b antes del intercambio porque tenía nombreb)y el el segundo identificador
bse asigna al segundo elemento de la tupla (que es el objeto que anteriormente era un antes del intercambio porque sus identificadores erana)Este mecanismo ha intercambiado efectivamente los objetos asignados a los identificadores
aybEntonces, para responder a su pregunta: SÍ, es la forma estándar de intercambiar dos identificadores en dos objetos.
Por cierto, los objetos no son variables, son objetos.
fuente
a, b, c = c, a, b.Esa es la forma estándar de intercambiar dos variables, sí.
fuente
Sé tres formas de intercambiar variables, pero
a, b = b, aes la más simple. Ahi estaXOR (para enteros)
O concisamente
Variable temporal
Tuple swap
fuente
codex = x + aa = xy x = xycodeNo diría que es una forma estándar de intercambio porque provocará algunos errores inesperados.
nums[i]se modificará primero y luego afectará a la segunda variablenums[nums[i] - 1].fuente
var c=a,a=b,b=c. Y luego, la última asignación utilizará el nuevo valor deapara evaluar la dirección de b.nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]. Resolvería el problema.nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]: El problema es cuando python hace la asignación del lado izquierdo,nums[i]se cambia, lo que provoca unnums[nums[i] - 1]cambio inesperado. Puedes imaginarte al principio que quieresnums[1],nums[2] = nums[2],nums[1], pero después denums[1] = nums[2]correr, ya no tienesnums[2] = nums[1], sino que tienesnums[888] = nums[1].No funciona para matrices multidimensionales, porque aquí se usan referencias.
Ver también Intercambiar rebanadas de matrices Numpy
fuente
Para evitar los problemas explicados por eyquem , puede usar el
copymódulo para devolver una tupla que contiene copias (invertidas) de los valores, a través de una función:La misma función que un
lambda:Luego, asigne esos a los nombres deseados, así:
NOTA: si lo desea, puede importar / usar en
deepcopylugar decopy.fuente
Se pueden combinar tuplas y XOR permutas: x, y = x ^ x ^ y, x ^ y ^ y
o
Usando lambda :
Salida:
fuente