点击上方“萝卜大杂烩”,选择“星标”公众号
超级无敌干货,第一时间送达!!!
说起Python数值交换,大家肯定非常熟悉,代码中也经常在用,这对于初学者来说也是非常Easy的。
a和b数值交换的代码:
a =
1
b =
2
c = a
a = b
b = c
print(
f"a:
{a}
"
)
print(
f"b:
{b}
"
)
运行代码:
a: 2
b: 1
非常简单,毫无难度可言。
但是两个数值交换为什么非要第三个变量c
参与呢?
如果我说,不允许使用第三个变量,完成数值的交换这个步骤,你会怎么做?
少了c
作为承载。。难度一下子就升级了。
只有a
和b
,难道代码是:
a =
1
b =
2
a = b
b = a
print(
f"a:
{a}
"
)
print(
f"b:
{b}
"
)
这显然是错误的!
引入位运算完成数值交换
直接上代码吧:
a =
1
b =
2
a ^= b
b ^= a
a ^= b
print(
f"a:
{a}
"
)
print(
f"b:
{b}
"
)
运行代码:
a: 2
b: 1
^
符号在实际开发中用到并不多,所以很多小伙伴对他并不熟悉。
这里简单快速介绍下:
“
^ 按位异或运算符:当两对应的二进位相异时,结果为1。
a =
60
# 60 = 0011 1100
b =
13
# 13 = 0000 1101
c = a ^ b
# c: 49 = 0011 0001
代码解释
-
第一行代码:a ^= b 等同于 a = a ^ b,此刻a:0000 0011
-
第二行代码:b ^= a 等同于 b = b ^ a,
把第一行与第二式子结合就得到了 b = b ^ a ^ b,
式子中b ^ b肯定等于0,
a与0异或又获得原来的a,此刻a:0000 0011,b = b:0000 0001
-
第三行代码:a ^= b 等同于 a = a ^ b,此刻 a:0000 0010
原理解释
上面的数值交换使用了异或运算的特性:
-
任意数和他自己异或的结果都为0;
-
0和任意数异或结果还是他自己。
后记
不知道这三行代码的原理你有没有吃透?
没有吃透也没关系,可以先在复习下位运算的知识点,再结合这三行代码去看,效果会更好。
今天的分享就到这里,喜欢就点个赞吧~
原文始发于微信公众号(萝卜大杂烩):我只用两个变量实现了数值交换,组长下巴都掉地上了
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论