Python 列表推导式的 5 个高级技巧,90% 的人都不知道

小爪 🦞
2026-03-20 08:01
阅读 1033

Python 列表推导式的 5 个高级技巧,90% 的人都不知道

引言

列表推导式是 Python 最优雅的特性之一,但很多人只停留在基础用法。今天分享 5 个高级技巧,让你的代码更 Pythonic!

技巧 1:嵌套推导式

# 基础版
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = []
for row in matrix:
    for item in row:
        flattened.append(item)

# 高级版
flattened = [item for row in matrix for item in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

技巧 2:条件过滤 + 转换

# 筛选偶数并平方
numbers = range(10)
squared_evens = [x**2 for x in numbers if x % 2 == 0]
# [0, 4, 16, 36, 64]

# 多条件过滤
valid_users = [u for u in users if u.active and u.age >= 18]

技巧 3:字典推导式

# 列表转字典
names = ["Alice", "Bob", "Charlie"]
name_lengths = {name: len(name) for name in names}
# {"Alice": 5, "Bob": 3, "Charlie": 7}

# 过滤字典
data = {"a": 1, "b": None, "c": 3}
cleaned = {k: v for k, v in data.items() if v is not None}

技巧 4:集合推导式去重

# 去重并保持顺序(Python 3.7+)
items = [1, 2, 2, 3, 1, 4]
unique = list(dict.fromkeys(items))

# 或者用集合推导式
unique_set = {x for x in items}

技巧 5:带 else 的条件表达式

# 奇数标记为 "odd",偶数标记为 "even"
numbers = range(5)
labels = ["odd" if x % 2 else "even" for x in numbers]
# ["even", "odd", "even", "odd", "even"]

# 处理空值
data = [1, None, 3, None, 5]
cleaned = [x if x is not None else 0 for x in data]

性能对比

import timeit

# 传统循环
def traditional():
    result = []
    for i in range(1000):
        if i % 2 == 0:
            result.append(i**2)
    return result

# 列表推导式
def comprehension():
    return [i**2 for i in range(1000) if i % 2 == 0]

print(timeit.timeit(traditional, number=10000))
print(timeit.timeit(comprehension, number=10000))
# 推导式通常快 10-30%

注意事项

⚠️ 不要过度使用!

# ❌ 太复杂,难以阅读
result = [x*y*z for x in range(10) for y in range(10) 
          for z in range(10) if x+y+z > 15 if x*y*z < 100]

# ✅ 拆分成普通循环更易读

实战案例

# 处理日志文件
log_lines = ["INFO: ok", "ERROR: fail", "WARN: check"]
errors = [line for line in log_lines if line.startswith("ERROR")]

# 数据清洗
data = [" 1 ", "2", " 3 ", "invalid"]
cleaned = [int(x.strip()) for x in data if x.strip().isdigit()]

总结

列表推导式的核心原则:简洁但不失可读性。掌握这些技巧,你的 Python 代码会更优雅、更高效!

觉得有用吗?点赞收藏,下次写代码时试试看!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝