找回密码
 立即注册
搜索
查看: 254|回复: 5

列表推导式

[复制链接]

27

主题

30

回帖

194

积分

管理员

积分
194
发表于 2026-6-17 22:28:58 | 显示全部楼层 |阅读模式
列表推导式(List Comprehension)是 Python 中最优雅、最 Pythonic 的特性之一。它提供了一种简洁、高效的方法,让你可以用一行代码从一个可迭代对象中生成一个新的列表。
简单来说,它就是把一个 for 循环 + 条件判断 + 添加元素的代码,压缩成一行表达式。


1. 基础语法结构

  1. [表达式 for 变量 in 可迭代对象 if 条件]
复制代码

  • 表达式:对每个元素执行的操作(可以是计算、函数调用等)。
  • for 变量 in 可迭代对象:循环遍历。
  • if 条件(可选):过滤条件,只有满足条件的元素才参与计算。


回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 22:33:31 | 显示全部楼层
2. 快速对比:传统循环 vs 列表推导式

场景:将 0 到 9 的平方数放入列表。
  • 传统写法(3 行):
    1. squares = []
    2. for i in range(10):
    3.     squares.append(i ** 2)
    4. print(squares)  # 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    复制代码


  • 列表推导式(1 行):
    1. squares = [i ** 2 for i in range(10)]
    2. print(squares)  # 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    复制代码
    效果完全相同,但代码量减少 2/3,且更易读

回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 22:35:27 | 显示全部楼层
3. 带过滤条件的用法

场景:筛选出 1 到 20 之间的偶数,并计算它们的平方。
  1. even_squares = [i ** 2 for i in range(1, 21) if i % 2 == 0]
  2. print(even_squares)  # 输出:[4, 16, 36, 64, 100, 144, 196, 256, 324, 400]
复制代码
逻辑等价于:

  1. even_squares = []
  2. for i in range(1, 21):
  3.     if i % 2 == 0:
  4.         even_squares.append(i ** 2)
复制代码


回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 22:36:30 | 显示全部楼层
4. 嵌套循环的推导式
场景:将两个列表的元素两两组合(生成笛卡尔积)。
  1. colors = ['红', '蓝']
  2. sizes = ['L', 'XL']
  3. result = [color + size for color in colors for size in sizes]
  4. print(result)  # 输出:['红L', '红XL', '蓝L', '蓝XL']
复制代码
注意:这里的 for 嵌套顺序和普通循环一致(外层在前,内层在后)。
回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 22:40:29 | 显示全部楼层
5. 与 if-else 结合(注意写法区别)
这里有一个常见易错点:if 放在后面是过滤,放在前面是条件表达式
  • 过滤(筛选):if 在 for 后面,决定是否保留元素。
    1. [x for x in range(10) if x > 5]   # 输出:[6, 7, 8, 9]
    复制代码


  • 条件赋值:if-else 在 for 前面,决定元素的值。

  1. [x if x > 5 else 0 for x in range(10)]  # 输出:[0, 0, 0, 0, 0, 0, 6, 7, 8, 9]
复制代码

回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 22:43:20 | 显示全部楼层
6. 实战技巧:处理字符串和嵌套列表
  • 去除字符串中的空格:
    1. words = ['  hello  ', '  world  ']
    2. clean = [word.strip() for word in words]
    3. print(clean)  # 输出:['hello', 'world']
    复制代码

  • 展平二维列表:
    1. matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    2. flat = [num for row in matrix for num in row]
    3. print(flat)  # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
    复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|老村长论坛

GMT+8, 2026-7-27 23:31 , Processed in 0.024275 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表