xiaoqing7319 发表于 2020-4-29 16:55:27

假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换,没看懂

假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换

x, y, z = z, y, x

这个有大佬给新手通俗的解释一下吗,脑袋不太够用。

qiuyouzhi 发表于 2020-4-29 16:58:10

拆开来看:
x = y
y = z
z = x
但这样是不对的,在最后,z = x的时候,x已经不是原来那个x了
而写在一起,却没有这个错误。

永恒的蓝色梦想 发表于 2020-4-29 16:59:44

这就是个特性……

jackz007 发表于 2020-4-29 17:03:26

x, y, z = 1, 2, 3
x, y, z = z, y, x
其实就是
x, y, z = 3, 2, 1

zltzlt 发表于 2020-4-29 17:23:44

这是 Python 独有的特性,相当于同时执行以下三条语句:

x = z
y = y
z = x

xiaoqing7319 发表于 2020-4-29 17:32:33

永恒的蓝色梦想 发表于 2020-4-29 16:59
这就是个特性……

意思是记住就行,不用理解么。。。

xiaoqing7319 发表于 2020-4-29 17:35:52

zltzlt 发表于 2020-4-29 17:23
这是 Python 独有的特性,相当于同时执行以下三条语句:

不太明白,x=1,y=2,z=3,相当于x=z,y=y, z=x,是吧,
那为什么不能,x=x,y=z,z=y呢。。。

zltzlt 发表于 2020-4-29 17:36:44

xiaoqing7319 发表于 2020-4-29 17:35
不太明白,x=1,y=2,z=3,相当于x=z,y=y, z=x,是吧,
那为什么不能,x=x,y=z,z=y呢。。。

因为当 z = y 时 y 的值已经被改变了,此时 y 的值是原来的 z

zltzlt 发表于 2020-4-29 17:36:58

xiaoqing7319 发表于 2020-4-29 17:32
意思是记住就行,不用理解么。。。

当然需要理解

heidern0612 发表于 2020-4-29 17:55:08

这种多重赋值的,可以用个临时的变量来解释。

你可以这么理解

x=1 ,y=2 , z=3

x,y,z = z,y,x相当于

x = temp1 = 1; y= temp2 = 2;z = temp3 = 3

temp1 = z;   temp2 = y ;temp3 = x。

相当于把原变量重新赋值临时变量,临时变量又重新赋值最终变量,原理就是这样了。

骑猪的小明 发表于 2020-4-29 18:10:26

用reverse()函数

xiaoqing7319 发表于 2020-4-29 18:16:42

zltzlt 发表于 2020-4-29 17:36
因为当 z = y 时 y 的值已经被改变了,此时 y 的值是原来的 z

那要这么理解的话,x , y , z = z , y , x,可以理解为,x = z,y = y,z = x,那当z = x的时候,x 的值也已经被改变了啊,此时x 的值就是原来的 z 呀,不是一个意思吗

zltzlt 发表于 2020-4-29 18:17:18

xiaoqing7319 发表于 2020-4-29 18:16
那要这么理解的话,x , y , z = z , y , x,可以理解为,x = z,y = y,z = x,那当z = x的时候,x 的值 ...

是同时执行,不是依次执行

xiaoqing7319 发表于 2020-4-29 18:20:29

heidern0612 发表于 2020-4-29 17:55
这种多重赋值的,可以用个临时的变量来解释。

你可以这么理解


那我可以把temp1 = y,temp2 = z,temp3 = x,吗?

heidern0612 发表于 2020-4-29 18:26:04

xiaoqing7319 发表于 2020-4-29 18:20
那我可以把temp1 = y,temp2 = z,temp3 = x,吗?

可以啊。

那就x,y,z= y,z,x,原理一样的。

xiaoqing7319 发表于 2020-4-29 18:30:21

heidern0612 发表于 2020-4-29 18:26
可以啊。

那就x,y,z= y,z,x,原理一样的。

那就是问题的答案并不一定是x,y,z = z,y,x了,也可以是x,y,z = x,z,y,也可以是x,y,z = y,x,z,是不?

heidern0612 发表于 2020-4-29 18:31:06

本帖最后由 heidern0612 于 2020-4-29 18:32 编辑

xiaoqing7319 发表于 2020-4-29 18:30
那就是问题的答案并不一定是x,y,z = z,y,x了,也可以是x,y,z = x,z,y,也可以是x,y,z = y,x,z,是不?

嗯,对,快速交换都可以这么写。

不过你后面这种交换位置有重复的,其实可以去掉。

知道这是一种快速赋值的方法就好。

xiaoqing7319 发表于 2020-4-29 18:42:58

qiuyouzhi 发表于 2020-4-29 16:58
拆开来看:

但这样是不对的,在最后,z = x的时候,x已经不是原来那个x了


大佬我明白了, 要想交换这三个值其实可以随意写,比如 x,y,z = z,x,y ; x,y,z = y,z,x ,但是不能拆分开来写,我自己在IDLE上写了几次,终于明白了

qiuyouzhi 发表于 2020-4-29 18:44:01

xiaoqing7319 发表于 2020-4-29 18:42
大佬我明白了, 要想交换这三个值其实可以随意写,比如 x,y,z = z,x,y ; x,y,z = y,z,x ,但是不能拆分开 ...

那就设个最佳答案吧~

莫待无花空折枝 发表于 2020-5-7 10:54:40

我觉得最佳答案是 x,y,z=y,z,x
相当于x=y
          y=z
          z=x三个赋值同时进行
页: [1]
查看完整版本: 假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换,没看懂