8、列表推导式你会,嵌套 + 条件组合你真会?

120 阅读2分钟

🧠 会用 [] 包住个 for 就说会推导式?今天我们来解锁推导式的隐藏技能树:嵌套、条件、组合、生成器通吃!


✅ 本文目标

  • 理解列表推导式的结构和性能优势
  • 掌握条件过滤、嵌套推导、字典/集合推导
  • 实战场景:二维数组拉平、过滤、格式转换等

🧩 一、基础语法复习

squares = [x**2 for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

等价于:

squares = []
for x in range(5):
    squares.append(x**2)

🔍 二、加入条件筛选:让它有“判断力”

even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]

结构:[表达式 for 变量 in 可迭代对象 if 条件]


🔁 三、嵌套循环:生成组合对 / 二维网格

pairs = [(x, y) for x in [1, 2, 3] for y in ['a', 'b']]
print(pairs)
# [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]

等价于:

for x in [1,2,3]:
    for y in ['a','b']:
        print((x, y))

🔢 四、二维数组拉平(常用于 NLP / 图像处理)

matrix = [[1, 2], [3, 4], [5, 6]]
flattened = [x for row in matrix for x in row]
print(flattened)  # [1, 2, 3, 4, 5, 6]

注意:先 row,再 x。对应 for row in matrixfor x in row


💡 五、字典推导式 / 集合推导式

words = ["apple", "banana", "cherry"]
d = {word: len(word) for word in words}
print(d)  # {'apple': 5, 'banana': 6, 'cherry': 6}
nums = [1, 2, 2, 3, 4]
s = {x for x in nums if x % 2 == 0}
print(s)  # {2, 4}

🧠 六、嵌套推导式实战:构造 9×9 乘法表

table = [f"{i}×{j}={i*j}" for i in range(1, 10) for j in range(1, i+1)]

image.png

配合格式美化:

for i in range(1, 10):
    row = [f"{j}×{i}={i*j}" for j in range(1, i+1)]
    print("  ".join(row))

image.png

🧪 实战:日志格式转换器(字符串格式处理)

原始数据:

raw_logs = [
    "user1: 200 OK",
    "user2: 500 ERROR",
    "user3: 404 NOT FOUND"
]

提取用户和状态码:

log_data = [{"user": line.split(":")[0], "code": int(line.split()[1])} for line in raw_logs]
print(log_data)
# [{'user': 'user1', 'code': 200}, {'user': 'user2', 'code': 500}, ...]

🔥 高阶技巧:内联 if(表达式中的三元操作)

flags = [True, False, True]
results = ["开启" if flag else "关闭" for flag in flags]
print(results)  # ['开启', '关闭', '开启']

🛠 BONUS 项目:词频统计过滤器(词长 ≥5)

text = "python is a great language and python is fun"
words = text.split()
filtered = [w for w in words if len(w) >= 5]
print(filtered)  # ['python', 'great', 'language', 'python']

🧠 总结一句话

列表推导式的精髓不是“简写”,而是高性能 + 可组合性 + 表达力