写Python代码总犯愁?
循环拼接字符串写得又长又丑,交换变量还要搞临时变量,取字典值怕报错得写一堆判断……明明很简单的需求,代码却越写越复杂,新手看了头大,自己回头维护也费劲。
其实Python藏了好多“偷懒技巧”!不用学复杂语法,只要换种写法,就能让代码又短又优雅,还不影响功能。今天就给新手盘点8个最实用的“黑魔法”,看完直接抄着用,代码效率翻倍~
一、字符串操作:告别冗长循环
1. 批量拼接字符串(比循环快10倍)
新手常见写法(又慢又繁琐):
words = ["我", "爱", "Python"]
result = ""
for word in words:
result += word # 每次循环都生成新字符串,效率低
print(result) # 输出:我爱Python
Python优雅写法(用join()一键搞定):
words = ["我", "爱", "Python"]
result = "".join(words) # 无分隔符拼接
# 想加空格?改成 " ".join(words) → 输出:我 爱 Python
print(result) # 输出:我爱Python
✅ 新手小贴士:join()是字符串拼接的“王者”,不管是列表、元组里的字符串,都能一次性拼接,性能比循环+=好太多!
2. 字符串反转(一行搞定,不用手动倒序)
新手常见写法(写循环倒着取字符):
s = "Python"
reversed_s = ""
# 从最后一个字符开始遍历,逐个拼接
for i in range(len(s)-1, -1, -1):
reversed_s += s[i]
print(reversed_s) # 输出:nohtyP
Python优雅写法(用切片[::-1]):
s = "Python"
reversed_s = s[::-1] # 切片魔法:从后往前取所有字符
print(reversed_s) # 输出:nohtyP
✅ 新手小贴士:切片格式是[开始:结束:步长],步长为-1就是“反向遍历”,不仅能反转字符串,列表也能用~
二、列表操作:一行代替多行循环
1. 快速生成列表(列表推导式)
新手常见写法(循环+append,写3行):
# 生成0-9的平方数列表
squares = []
for i in range(10):
squares.append(i * i)
print(squares) # 输出:[0,1,4,9,16,25,36,49,64,81]
Python优雅写法(一行列表推导式):
# 格式:[表达式 for 变量 in 可迭代对象]
squares = [i * i for i in range(10)]
print(squares) # 输出:[0,1,4,9,16,25,36,49,64,81]
2. 生成列表+筛选条件(不用嵌套if)
新手常见写法(循环里套判断,代码臃肿):
# 筛选0-9中的偶数,再求平方
even_squares = []
for i in range(10):
if i % 2 == 0: # 先判断是否为偶数
even_squares.append(i * i)
print(even_squares) # 输出:[0,4,16,36,64]
Python优雅写法(推导式里加条件):
# 格式:[表达式 for 变量 in 可迭代对象 if 条件]
even_squares = [i * i for i in range(10) if i % 2 == 0]
print(even_squares) # 输出:[0,4,16,36,64]
✅ 新手小贴士:列表推导式不仅简洁,运行速度也比普通循环快,还能嵌套(但新手建议先掌握单层,避免复杂)~
三、变量操作:简单需求不用复杂代码
1. 交换两个变量(不用临时变量)
新手常见写法(靠临时变量过渡,麻烦):
a = 5
b = 10
# 用temp存a的值,再交换
temp = a
a = b
b = temp
print(a, b) # 输出:10 5
Python优雅写法(一行解包赋值):
a = 5
b = 10
a, b = b, a # 直接交换,底层自动处理
print(a, b) # 输出:10 5
✅ 新手小贴士:还能同时交换多个变量!比如x, y, z = z, x, y,直接打乱顺序~
2. 快速赋值多个变量(不用逐个写=)
新手常见写法(逐个赋值,重复又无聊):
name = "小明"
age = 20
city = "北京"
print(name, age, city) # 输出:小明 20 北京
Python优雅写法(元组批量赋值):
name, age, city = "小明", 20, "北京" # 用逗号分隔,一一对应
print(name, age, city) # 输出:小明 20 北京
四、字典操作:避免KeyError报错
新手常见写法(取键前要判断,代码冗余):
data = {"name": "小明", "age": 20}
# 想取"city",怕不存在报错,得先判断
if "city" in data:
city = data["city"]
else:
city = "未知城市" # 没有就用默认值
print(city) # 输出:未知城市
Python优雅写法(用get()方法):
data = {"name": "小明", "age": 20}
# 格式:字典.get(键, 默认值),不存在就返回默认值
city = data.get("city", "未知城市")
print(city) # 输出:未知城市
✅ 新手小贴士:get()是字典的“保命技巧”,新手一定要记住!默认值可以是任意类型,比如数字、列表、字符串~
五、循环遍历:不用手动记索引
1. 循环时要索引+值(不用自己加计数器)
新手常见写法(用index计数,容易忘加1):
fruits = ["苹果", "香蕉", "橘子"]
index = 0
for fruit in fruits:
print(index, fruit) # 想同时输出索引和值
index += 1 # 手动更新索引
# 输出:0 苹果 / 1 香蕉 / 2 橘子
Python优雅写法(用enumerate()):
fruits = ["苹果", "香蕉", "橘子"]
# enumerate(列表, 起始索引),默认从0开始
for index, fruit in enumerate(fruits):
print(index, fruit)
# 想从1开始?改成 enumerate(fruits, 1) → 1 苹果 / 2 香蕉 / 3 橘子
2. 并行遍历多个列表(不用按索引取)
新手常见写法(按索引遍历,容易越界):
names = ["小明", "小红", "小刚"]
scores = [90, 85, 95]
# 按索引取,要确保两个列表长度一致
for i in range(len(names)):
print(names[i], "的分数是", scores[i])
# 输出:小明 的分数是 90 / 小红 的分数是 85 / 小刚 的分数是 95
Python优雅写法(用zip()打包):
names = ["小明", "小红", "小刚"]
scores = [90, 85, 95]
# zip把两个列表打包成成对的元组,直接解包
for name, score in zip(names, scores):
print(name, "的分数是", score)
✅ 新手小贴士:zip()支持多个列表!比如zip(a, b, c),循环时就能同时取三个列表的值~
最后说句大实话
这些Python“黑魔法”不是“炫技”,而是前辈们总结的高效写法——用更少的代码做更多的事,还能让代码更易读。
新手不用一下子全记住,先从join()、get()、列表推导式这3个最常用的开始,写代码时刻意练习,慢慢就会养成“Pythonic”的习惯~