Pra*_*are 3 python algorithm tuples
我试图在python中实现XOR交换.
x,y= 10,20
x,y,x = x^y,x^y,x^y
print('%s , %s'%(x,y))
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
30 , 30
Run Code Online (Sandbox Code Playgroud)
我不是python的新手,但我无法解释这个输出.它应该是20,10.
引擎盖下发生了什么?
Ign*_*ams 15
首先,创建一个由x^y,x^y和组成的元组x^y.然后将元组解压缩到x,y并且x,使两者都绑定到结果x^y.
保存自己的头痛,并以Pythonic方式做到:
x, y = y, x
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 10
虽然它肯定是最好的,正如其他答案所说的那样,x, y = y, x如果你对创建和解包元组过敏,你可以用连续的x-oring来做它......它只需要连续,而不是你正在做的同步!
>>> x = 1234
>>> y = 3421
>>> x ^= y
>>> y ^= x
>>> x ^= y
>>> print x
3421
>>> print y
1234
Run Code Online (Sandbox Code Playgroud)
xor-swap技巧的关键是三个连续的 xors,即一个接一个 - ^=在这个片段中的三个单独的语句.当然,它没有任何实际意义,但是,如果你真的热衷于它,它确实有效,在Python中就像其他地方一样;-).