什么是推导式(Comprehension)

Python推导式详解

推导式(Comprehension)是 Python 中一种简洁、高效地创建序列(如列表、集合、字典)的语法。它允许你在一个表达式中结合 for 循环和 if 条件,快速生成新的数据结构。

推导式的核心思想是:

从一个已有的可迭代对象(如列表、range、字符串等)出发,通过某种规则生成新的序列。


✅ 推导式的几种类型

推导式每种使用不同的括号:

类型语法括号生成的对象
列表推导式[表达式 for 变量 in 可迭代对象 if 条件][ ]list(列表)
集合推导式{表达式 for 变量 in 可迭代对象 if 条件}{ }set(集合,无重复元素)
字典推导式{键: 值 for 变量 in 可迭代对象 if 条件}{ }dict(字典)
生成器表达式(表达式 for 变量 in 可迭代对象 if 条件)( )generator(生成器,惰性求值)

🧩 详细示例

1. 列表推导式 [ ] → 生成 list
# 生成 1 到 10 的平方
squares = [x**2 for x in range(1, 11)]
print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2. 集合推导式 { } → 生成 set
# 生成字符串中所有唯一的小写字母
text = "hello world"
unique_letters = {c for c in text if c.islower()}
print(unique_letters)  # {'h', 'e', 'l', 'o', 'w', 'r', 'd'}  ← 无序,无重复
3. 字典推导式 { } → 生成 dict
# 生成数字到其平方的映射
square_dict = {x: x**2 for x in range(1, 6)}
print(square_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
4. 生成器表达式 ( ) → 生成 generator
# 生成一个“平方数生成器”,不立即计算,节省内存
squares_gen = (x**2 for x in range(1, 11))
print(squares_gen)  # <generator object <genexpr> at 0x...>
print(list(squares_gen))  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  • ✅ 如果你想生成一个 列表(list),就用 [ ]
  • ✅ 如果你想生成一个 集合(set),就用 { }
  • ✅ 如果你想生成一个 字典(dict),就用 { }(但必须是 key: value 形式)。
  • ✅ 如果你想生成一个 生成器(generator),就用 ( )

🔁 括号的类型决定了你最终得到的数据结构。


⚠️ 注意:{ } 的歧义

{x for x in range(5)}    # 集合推导式 → {0, 1, 2, 3, 4}
{x: x**2 for x in range(5)}  # 字典推导式 → {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
{x for x in range(5)}    # 如果写成 {x} 是语法错误?不,它是集合推导式

Python 通过语法结构判断:

  • {表达式 for ...} → 集合
  • {键: 值 for ...} → 字典

✅ 总结

问题回答
什么是推导式?一种用简洁语法快速创建列表、集合、字典或生成器的方式。

推导式是 Python 的“语法糖”,能让代码更简洁、更易读,是 Python 开发者的必备技能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路生花工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值