鱼C论坛

 找回密码
 立即注册
查看: 4065|回复: 19

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

[复制链接]
发表于 2020-4-29 16:55:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

x, y, z = z, y, x

这个有大佬给新手通俗的解释一下吗,脑袋不太够用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 16:58:10 | 显示全部楼层
拆开来看:
x = y
y = z
z = x
但这样是不对的,在最后,z = x的时候,x已经不是原来那个x了
而写在一起,却没有这个错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 16:59:44 | 显示全部楼层
这就是个特性……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 17:03:26 | 显示全部楼层
x, y, z = 1, 2, 3
x, y, z = z, y, x
其实就是
x, y, z = 3, 2, 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 17:23:44 | 显示全部楼层
这是 Python 独有的特性,相当于同时执行以下三条语句:
x = z
y = y
z = x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 17:32:33 | 显示全部楼层

意思是记住就行,不用理解么。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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呢。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 17:36:58 | 显示全部楼层
xiaoqing7319 发表于 2020-4-29 17:32
意思是记住就行,不用理解么。。。

当然需要理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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。

相当于把原变量重新赋值临时变量,临时变量又重新赋值最终变量,原理就是这样了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 18:10:26 | 显示全部楼层
用reverse()函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 呀,不是一个意思吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 的值 ...

是同时执行,不是依次执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 18:20:29 | 显示全部楼层
heidern0612 发表于 2020-4-29 17:55
这种多重赋值的,可以用个临时的变量来解释。

你可以这么理解

那我可以把temp1 = y,temp2 = z,temp3 = x,吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 18:26:04 | 显示全部楼层
xiaoqing7319 发表于 2020-4-29 18:20
那我可以把temp1 = y,temp2 = z,temp3 = x,吗?

可以啊。

那就x,y,z= y,z,x,原理一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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,是不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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,是不?


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

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

知道这是一种快速赋值的方法就好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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上写了几次,终于明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那就设个最佳答案吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-7 10:54:40 | 显示全部楼层
我觉得最佳答案是 x,y,z=y,z,x
相当于x=y
          y=z
          z=x三个赋值同时进行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 18:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表