【Python】列表推导式、lambda表达式

本文介绍了如何利用Python的lambda表达式创建简洁的匿名函数,并结合map()函数对列表进行高效处理。通过实例展示了如何筛选列表元素,实现数据过滤与转换,为Python编程提供了一种更简洁的方法。

lambda:简单版的function

lambda 参数:返回值

map():对可迭代对象中的每个元素施加function

 从旧列表,由if条件筛选列表元素,从而产生新列表

使用列表推导式替代 `lambda` 表达式可以显著提升代码的可读性和简洁性,尤其是在配合 `map()`、`filter()` 等函数时。列表推导式语法更直观、更 Pythonic,易于理解和维护。 ### 示例对比 #### 1. 使用 `lambda` + `map` ```python # 将列表中的每个数平方 numbers = [1, 2, 3, 4, 5] squared = list(map(lambda x: x ** 2, numbers)) ``` #### 使用列表推导式替代 ```python squared = [x ** 2 for x in numbers] ``` ✅ 更直观,一眼看出“对每个 x 计算 x²”。 --- #### 2. 使用 `lambda` + `filter` ```python # 过滤出偶数 evens = list(filter(lambda x: x % 2 == 0, numbers)) ``` #### 使用列表推导式替代 ```python evens = [x for x in numbers if x % 2 == 0] ``` ✅ 条件清晰,结构自然,像“从 numbers 中取 x,如果 x 是偶数”。 --- #### 3. 复杂逻辑(带条件映射) ```python # 使用 lambda 和 map 实现:偶数平方,奇数立方 result = list(map(lambda x: x**2 if x % 2 == 0 else x**3, numbers)) ``` #### 使用列表推导式替代 ```python result = [x**2 if x % 2 == 0 else x**3 for x in numbers] ``` ✅ 逻辑一致,但更易读,尤其对新手更友好。 --- #### 4. 嵌套过滤与映射(多条件) ```python # 原始数据 data = [-2, -1, 0, 1, 2, 3, 4] # 使用 lambda:只处理正数,并平方 filtered_squared = list(map(lambda x: x**2, filter(lambda x: x > 0, data))) ``` #### 使用列表推导式替代 ```python filtered_squared = [x**2 for x in data if x > 0] ``` ✅ 一行搞定,无需嵌套高阶函数,逻辑更清晰。 --- ### 优势总结 | 对比项 | Lambda + map/filter | 列表推导式 | |------------------|----------------------------|------------------------------| | 可读性 | 较低(需理解函数式思维) | 高(类似自然语言) | | 性能 | 略慢(函数调用开销) | 略快(优化过的循环) | | 调试 | 困难(匿名函数无名) | 容易(变量名明确) | | 多重逻辑支持 | 复杂嵌套 | 支持 `if-else` 和多层 `if` | | 是否推荐 | 简单场景可用 | 更推荐作为首选方式 | --- ### 结论 在大多数情况下,**应优先使用列表推导式代替 `lambda` + `map/filter`**,特别是在: - 数据转换(map) - 条件筛选(filter) - 组合操作(map + filter) 只有在需要将函数作为对象传递给其他函数(如 `sorted(key=lambda ...)`、`pandas.apply`)时,`lambda` 才是合理且常用的选择。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值