你想要的是能直接落地、解决日常编程痛点的Python小技巧,我整理了10个覆盖数据处理、代码简化、效率提升的高频技巧,每个都附示例代码和使用场景,新手也能快速上手。
1. 一键交换两个变量(无需临时变量)
核心技巧:用解构赋值直接交换,告别传统“temp中间变量”写法。
# 传统写法(繁琐)
a = 10
b = 20
temp = a
a = b
b = temp
# 简洁写法(推荐)
a, b = b, a
print(a, b) # 输出:20 10
适用场景:变量值互换、数据排序时的元素交换。
2. 快速生成数字/字符序列(range/生成器)
核心技巧:用range()或生成器表达式快速造序列,替代手动敲列表。
# 生成0-9的整数列表
nums = list(range(10))
print(nums) # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 生成1-100的偶数列表(生成器更省内存)
even_nums = [x for x in range(1, 101) if x % 2 == 0]
print(even_nums[:5]) # 输出:[2, 4, 6, 8, 10]
# 生成重复字符/字符串
chars = "a" * 5
print(chars) # 输出:aaaaa
适用场景:循环遍历、测试数据生成、批量造数。
3. 列表/字典快速去重(保留顺序)
核心技巧:列表去重用dict.fromkeys()(3.7+保留顺序),字典去重直接取键。
# 列表去重(保留原顺序)
lst = [1, 2, 2, 3, 3, 3, 4]
unique_lst = list(dict.fromkeys(lst))
print(unique_lst) # 输出:[1, 2, 3, 4]
# 字典去重(按值去重,保留第一个键)
d = {"a": 1, "b": 2, "c": 1, "d": 2}
unique_d = {}
for k, v in d.items():
if v not in unique_d.values():
unique_d[k] = v
print(unique_d) # 输出:{'a': 1, 'b': 2}
适用场景:数据清洗、重复值过滤、统计唯一值。
4. 一行代码合并多个列表/字典
核心技巧:列表用+或extend,字典用|(3.9+)或update,简洁高效。
# 合并列表
lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
merged_lst = lst1 + lst2 # 或 lst1.extend(lst2)
print(merged_lst) # 输出:[1, 2, 3, 4, 5, 6]
# 合并字典(3.9+)
d1 = {"name": "张三", "age": 20}
d2 = {"gender": "男", "age": 21}
merged_d = d1 | d2 # 重复键取后一个值
print(merged_d) # 输出:{'name': '张三', 'age': 21, 'gender': '男'}
适用场景:多数据源整合、配置项合并。
5. 快速统计列表元素出现次数(Counter)
核心技巧:用collections.Counter,替代手动循环计数,一行出结果。
from collections import Counter
lst = ["苹果", "香蕉", "苹果", "橙子", "香蕉", "苹果"]
count = Counter(lst)
print(count) # 输出:Counter({'苹果': 3, '香蕉': 2, '橙子': 1})
print(count["苹果"]) # 输出:3(查单个元素次数)
print(count.most_common(2)) # 输出:[('苹果', 3), ('香蕉', 2)](取前2多的元素)
适用场景:数据统计、词频分析、重复值排查。
6. 优雅处理空值/默认值(or/get)
核心技巧:用or给变量设默认值,字典用get()避免KeyError。
# 变量默认值(避免None/空字符串)
name = "" # 或 None
real_name = name or "未知用户"
print(real_name) # 输出:未知用户
# 字典取值(避免KeyError)
d = {"a": 1, "b": 2}
# 传统写法(易报错)
# print(d["c"]) # KeyError
# 优雅写法
print(d.get("c", 0)) # 输出:0(键不存在时返回默认值0)
适用场景:数据读取、参数校验、字典取值。
7. 批量读取文件(glob+with)
核心技巧:用glob匹配文件路径,with自动关闭文件,避免内存泄漏。
import glob
# 读取当前目录下所有.txt文件
for file_path in glob.glob("*.txt"):
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
print(f"文件{file_path}内容:\n{content[:50]}...") # 只打印前50字符
适用场景:批量处理日志、文本文件、数据文件。
8. 快速格式化字符串(f-string)
核心技巧:用f-string替代%或format,简洁且支持表达式。
name = "李四"
age = 25
# 传统写法(繁琐)
print("姓名:%s,年龄:%d" % (name, age))
# f-string写法(推荐)
print(f"姓名:{name},年龄:{age},明年年龄:{age + 1}")
# 输出:姓名:李四,年龄:25,明年年龄:26
# 格式化数字(保留2位小数)
num = 3.1415926
print(f"圆周率:{num:.2f}") # 输出:圆周率:3.14
适用场景:日志输出、数据展示、字符串拼接。
9. 循环带索引(enumerate)
核心技巧:用enumerate同时获取索引和值,替代手动计数i += 1。
lst = ["a", "b", "c", "d"]
# 传统写法(易出错)
i = 0
for item in lst:
print(f"索引{i}:{item}")
i += 1
# 优雅写法
for idx, item in enumerate(lst, start=1): # start指定索引起始值
print(f"索引{idx}:{item}")
# 输出:
# 索引1:a
# 索引2:b
# 索引3:c
# 索引4:d
适用场景:遍历列表/元组、需要索引的循环操作。
10. 快速执行耗时统计(timeit)
核心技巧:用timeit测试代码运行时间,优化性能瓶颈。
import timeit
# 测试两种列表生成方式的耗时
# 方式1:列表推导式
t1 = timeit.timeit('[x for x in range(10000)]', number=1000)
# 方式2:for循环
t2 = timeit.timeit('lst=[]; for x in range(10000): lst.append(x)', number=1000)
print(f"列表推导式耗时:{t1:.4f}秒")
print(f"for循环耗时:{t2:.4f}秒")
# 输出示例:
# 列表推导式耗时:0.0821秒
# for循环耗时:0.1567秒
适用场景:代码性能优化、算法效率对比。
这些技巧覆盖了Python日常开发80%的高频场景,熟练掌握后能显著提升编码效率,避免新手常见的“繁琐写法”和“低级错误”。需要我针对某一个技巧展开讲解,或补充更多场景的实战案例吗?