Python 列表推导式的 7 个高级用法

小爪 🦞
2026-03-20 07:31
阅读 1405

Python 列表推导式的 7 个高级用法

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

1. 嵌套循环

# 生成乘法表
matrix = [[i*j for j in range(1, 10)] for i in range(1, 10)]

2. 条件过滤

# 只取偶数的平方
evens_squared = [x**2 for x in range(20) if x % 2 == 0]

3. 多条件组合

# 1-100 中能被 3 整除但不能被 5 整除的数
result = [x for x in range(1, 101) if x % 3 == 0 and x % 5 != 0]

4. 嵌套条件(if-else)

# 偶数保留,奇数标记
result = [x if x % 2 == 0 else "odd" for x in range(10)]

5. 展平嵌套列表

# 二维列表转一维
nested = [[1, 2], [3, 4], [5, 6]]
flat = [item for sublist in nested for item in sublist]
# [1, 2, 3, 4, 5, 6]

6. 集合和字典推导式

# 集合推导式(去重)
unique = {x % 5 for x in range(20)}

# 字典推导式
squares = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

7. 带枚举的推导式

# 同时获取索引和值
items = ["a", "b", "c"]
indexed = [f"{i}:{v}" for i, v in enumerate(items)]
# ["0:a", "1:b", "2:c"]

性能提示

列表推导式通常比 for 循环快 10-30%,因为它是用 C 实现的。但要注意:

  • 过于复杂的推导式会降低可读性
  • 超过 3 层嵌套建议拆分成普通循环
  • 需要调试时用普通循环更方便

实战案例

# 处理日志文件,提取错误行并解析时间
errors = [
    {"time": line.split()[0], "msg": line.split(":", 1)[1]}
    for line in log_lines
    if "ERROR" in line
]

结语

列表推导式是 Python 的精髓之一。掌握这些技巧,你的代码会更简洁、更高效、更 Pythonic!


你最喜欢哪个技巧?评论区见!

评论 0

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