从基础到高阶,一篇文章讲透 Python 的「值交换」艺术
一、最经典的写法:临时变量法
这是所有编程语言通用的方法,直观好理解:
a=10
b=20
# 使用临时变量 temp
temp=a
a=b
b=temp
print(f"a = {a}, b = {b}") # 输出: a = 20, b = 10
✅ 优点:逻辑清晰,几乎所有语言都支持❌ 缺点:需要额外内存空间,代码稍冗长
二、Pythonic 写法:元组解包 ⭐推荐
这是 Python 独有的优雅写法,一行代码搞定:
a=10
b=20
# Python 特色:元组解包交换
a, b=b, a
print(f"a = {a}, b = {b}") # 输出: a = 20, b = 10
🔍 原理揭秘:
右边 b, a 先被打包成一个元组(20, 10)
左边 a, b 再解包赋值,分别拿到对应值
✅ 优点:简洁优雅,无需临时变量,是 Python 的惯用写法
三、数学运算交换法(面试常考)
不用临时变量,只用加减法或异或运算:
方法 A:加减法
a=10
b=20
a=a+b# a = 30
b=a-b# b = 10
a=a-b# a = 20
print(f"a = {a}, b = {b}")
⚠️ 注意:存在整数溢出风险(其他语言),Python 中整数无限精度,相对安全,但仍不推荐日常使用。
方法 B:异或运算(仅整数)
a=10# 二进制 1010
b=20# 二进制 10100
a=a^b
b=a^b
a=a^b
print(f"a = {a}, b = {b}") # 成功交换
✅ 优点:无需额外空间,炫技专用❌ 缺点:可读性差,仅限整数,Python 中没必要用
四、多变量同时交换
Python 的元组解包还能玩更花的,多个变量一键轮换:
# 三个变量轮换:a→b, b→c, c→a
a, b, c=1, 2, 3
a, b, c=b, c, a
print(a, b, c) # 输出: 2 3 1
# 甚至更多...
x, y, z, w=1, 2, 3, 4
x, y, z, w=y, z, w, x# 集体左移轮换
五、实际应用场景
场景 1:列表元素交换(冒泡排序核心)
nums= [3, 1, 4, 1, 5]
# 交换索引 0 和 1 的元素
nums[0], nums[1] =nums[1], nums[0]
print(nums) # [1, 3, 4, 1, 5]
场景 2:函数多返回值接收
defget_min_max(numbers):
returnmin(numbers), max(numbers)
min_val, max_val=get_min_max([3, 1, 4, 1, 5])
# 直接解包到两个变量,无需中间步骤
六、对比总结表
| 方法 | 代码行数 | 可读性 | 适用场景 | 推荐指数 |
|---|
| 临时变量 | 3 行 | ⭐⭐⭐ | 所有语言通用 | ⭐⭐⭐ |
| 元组解包 | 1 行 | ⭐⭐⭐⭐⭐ | Python 首选 | ⭐⭐⭐⭐⭐ |
| 加减法 | 3 行 | ⭐⭐ | 面试炫技 | ⭐⭐ |
| 异或运算 | 3 行 | ⭐ | 整数专用 | ⭐ |
七、记住这个口诀 🎯
「临时变量最通用,元组解包最 Python」
日常写代码,直接用 a, b = b, a 就对了!既简洁又专业,一看就知道是老 Pythoner 了。
💬 互动话题:你还知道哪些交换变量的奇技淫巧?欢迎在评论区分享!
本文适合收藏转发,方便随时查阅~