Python中推导式和表达式

部署运行你感兴趣的模型镜像

在 Python 中,推导式(Comprehensions) 和 生成器表达式(Generator Expressions) 是简洁高效的数据结构构造方式,适用于 列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set) 和 生成器(Generator)


1. 列表推导式(List Comprehension)

作用:快速生成列表,比 for 循环更简洁高效。
语法[expression for item in iterable if condition]

示例

(1) 基本形式
squares = [x ** 2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
(2) 带条件过滤
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]
(3) 嵌套循环
pairs = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
print(pairs)  # [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

2. 元组推导式(Tuple Comprehension)

注意:Python 没有真正的 "元组推导式",但可以用 tuple() 包裹生成器表达式。
语法tuple(expression for item in iterable if condition)

示例

even_numbers = tuple(x for x in range(10) if x % 2 == 0)
print(even_numbers)  # (0, 2, 4, 6, 8)

3. 字典推导式(Dictionary Comprehension)

作用:快速生成字典。
语法{key_expr: value_expr for item in iterable if condition}

示例

(1) 基本形式
square_dict = {x: x ** 2 for x in range(5)}
print(square_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
(2) 交换键值
original = {'a': 1, 'b': 2, 'c': 3}
swapped = {v: k for k, v in original.items()}
print(swapped)  # {1: 'a', 2: 'b', 3: 'c'}
(3) 条件过滤
filtered_dict = {k: v for k, v in original.items() if v > 1}
print(filtered_dict)  # {'b': 2, 'c': 3}

4. 集合推导式(Set Comprehension)

作用:生成不重复的无序集合。
语法{expression for item in iterable if condition}

示例

unique_squares = {x ** 2 for x in [-2, -1, 0, 1, 2]}
print(unique_squares)  # {0, 1, 4}

5. 生成器表达式(Generator Expression)

作用:惰性计算(按需生成值),节省内存。
语法(expression for item in iterable if condition)

示例

(1) 基本形式
gen = (x ** 2 for x in range(10))
print(gen)  # <generator object <genexpr> at 0x7f8c0a2b3d60>

# 逐个取值
for num in gen:
    print(num, end=" ")  # 0 1 4 9 16 25 36 49 64 81
(2) 与 sum()max() 等函数结合
sum_of_squares = sum(x ** 2 for x in range(10))
print(sum_of_squares)  # 285

总结对比

数据结构推导式语法特点
列表[x for x in iterable]可变,有序
元组tuple(x for x in iterable)不可变,有序
字典{k: v for k, v in iterable}键值对,无序
集合{x for x in iterable}唯一值,无序
生成器(x for x in iterable)惰性计算,节省内存

应用场景

  • 列表推导式:适合构造新列表,如 [x * 2 for x in lst]

  • 字典推导式:适合转换字典,如 {k: v * 2 for k, v in d.items()}

  • 集合推导式:适合去重,如 {x % 5 for x in nums}

  • 生成器表达式:适合大数据处理(避免内存爆炸),如 sum(x ** 2 for x in range(10**6))


性能优化

  • 生成器 > 列表推导式(内存更优)

  • map() + filter() 比推导式更快(但可读性较差)

# 生成器(内存高效)
gen = (x ** 2 for x in range(10**6) if x % 2 == 0)

# 列表推导式(立即计算)
lst = [x ** 2 for x in range(10**6) if x % 2 == 0]

掌握推导式可以大幅提升 Python 代码的简洁性和效率! 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值