程序员秒解Python三大难题 他做对了什么?
消息来源:baojiabao.com 作者: 发布时间:2024-05-13
作者 | veelion
责编 | 胡巍巍
函数lambda、map、filter,是Python中的重要知识点。本篇文章,将通过示例,来介绍Python中的lambda、map、filter函数的使用方法。
lambda
lambda操作符(或lambda函数)通常用来创建小巧的,一次性的匿名函数对象。它的基本语法如下:
lambda操作符可以有任意数量的参数,但是它只能有一个表达式,且不能包含任何语句,返回一个可以赋值给任何变数的函数对象。
下面通过一个例子来理解一下。首先看看一个Python函数:
上述函数名为add, 它需要两个参数x和y,并返回它们的和。接下来,我们把上面的函数变成一个lambda函数:
add = lambda x, y : x + y
print(add(1,2))# Output: 3
在lambda x, y : x + y中,x和y是函数的参数,x+y是表达式,它被执行并返回结果。
lambda x, y : x + y返回的是一个函数对象,它可以被赋值给任何变数。在本例中函数对象被赋值给了add变数。如果我们查看add的type,可以看到它是一个Function。
绝大多数lambda函数作为一个参数传给一个需要函数对象为参数的函数,比如map,reduce,filter等函数。
map
map的基本语法如下:
map(function_object, iterable1, iterable2, ...)
map函数需要一个函数对象和任意数量的iterables,如list、dictionary等。它为序列中的每个元素执行function_object,并返回由函数对象修改的元素组成的列表。
示例如下:
defadd2(x):
returnx+2
map(add2, [1,2,3,4])
# Output: [3,4,5,6]
在上面的例子中,map对list中的每个元素1,2,3,4执行add2函数并返回[3,4,5,6]。接着看看,如何用map和lambda重写上面的代码:
map(lambdax:x+2,[1,2,3,4])
#Output:[3,4,5,6]
仅仅一行即可搞定!
使用map和lambda迭代dictionary:
dict_a = [
{"name":"python","points":10},
{"name":"java","points":8}
]
map(lambdax:x["name"], dict_a)
# Output: ["python", "java"]
map(lambdax:x["points"]*10, dict_a)
# Output: [100, 80]
map(lambdax:x["name"] =="python", dict_a)
#Output: [True, False]
以上代码中,dict_a中的每个dict作为参数传递给lambda函数。lambda函数表达式作用于每个dict的结果作为输出。
map函数作用于多个iterables:
list_a = [1, 2, 3]
list_b = [10, 20, 30]
map(lambda x, y: x + y, list_a, list_b)
# Output: [11, 22, 33]
这里,list_a和list_b的第i个元素作为参数传递给lambda函数。
在Python3中,map函数返回一个惰性计算(lazily evaluated)的迭代器(Iterator)或map对象。就像zip函数是惰性计算那样。
我们不能通过index访问map对象的元素,也不能使用Len()得到它的长度。
但我们可以强制转换map对象为list:
filter
filter的基本语法如下:
filter(function_object, iterable)
filter函数需要两个参数,function_object返回一个布尔值(boolean),对iterable的每一个元素调用function_object,filter只返回满足function_object为True的元素。
和map函数一样,filter函数也返回一个list,但与map函数不同的是,filter函数只能有一个iterable作为输入。
示例:
返回偶数:
a = [1, 2, 3, 4, 5, 6]
filter(lambda x : x % 2 == 0, a)
# Output: [2, 4, 6]
过滤dicts的list:
dict_a = [
{"name":"python","points":10},
{"name":"java","points":8}
]
filter(lambda x : x["name"] =="python", dict_a)
# Output: [{"name":"python","points":10}]
和map一样,filter函数在Python3中返回一个惰性计算的filter对象或迭代器。我们不能通过index访问filter对象的元素,也不能使用Len()得到它的长度。
list_a = [1, 2, 3, 4, 5]
filter_obj = filter(lambda x: x % 2 == 0, list_a)
# filter object
even_num = list(filter_obj)
# Converts the filer obj to a list
print(even_num)# Output: [2, 4]
作者:veelion,具有十年开发经验,主要使用Python、C++语言,从事网络爬虫、搜索引擎、自然语言理解处理等领域的研发工作。
声明:本文为作者投稿,版权归对方所有。
相关文章
- 中兴受美国制裁事件 被罚了20亿美元过程事件始末 中兴被制裁后公司现状
2023-11-02 22:12:46
- B站怎么炸崩了哔哩哔哩服务器今日怎么又炸挂了?技术团队公开早先原因
2023-03-06 19:05:55
- 苹果iPhoneXS/XR手机电池容量续航最强?答案揭晓
2023-02-19 15:09:54
- 华为荣耀两款机型起内讧:荣耀Play官方价格同价同配该如何选?
2023-02-17 23:21:27
- google谷歌原生系统Pixel3 XL/4/5/6 pro手机价格:刘海屏设计顶配版曾卖6900元
2023-02-17 18:58:09
- 科大讯飞同传同声翻译软件造假 浮夸不能只罚酒三杯
2023-02-17 18:46:15
- 华为mate20pro系列手机首发上市日期价格,屏幕和电池参数配置对比
2023-02-17 18:42:49
- 小米MAX4手机上市日期首发价格 骁龙720打造大屏标准
2023-02-17 18:37:22
- 武汉弘芯遣散!结局是总投资1280亿项目烂尾 光刻机抵押换钱
2023-02-16 15:53:18
- 谷歌GoogleDrive网云盘下载改名“GoogleOne” 容量提升价格优惠
2023-02-16 13:34:45
- 巴斯夫将裁员6000人 众化工巨头裁员潮再度引发关注
2023-02-13 16:49:06
- 人手不足 韵达快递客服回应大量包裹派送异常没有收到
2023-02-07 15:25:20
- 资本微念与李子柒销声匿迹谁赢? 微念公司退出子柒文化股东
2023-02-02 09:24:38
- 三星GalaxyS8 S9 S10系统恢复出厂设置一直卡在正在检查更新怎么办
2023-01-24 10:10:02
- 华为Mate50 RS保时捷最新款顶级手机2022多少钱?1.2万元售价外观图片吊打iPhone14
2023-01-06 20:27:09
- 芯片常见的CPU芯片封装方式 QFP和QFN封装的区别?
2022-12-02 17:25:17
- 华为暂缓招聘停止社招了吗?官方回应来了
2022-11-19 11:53:50
- 热血江湖手游:长枪铁甲 刚猛热血 正派枪客全攻略技能介绍大全
2022-11-16 16:59:09
- 东京把玩了尼康微单相机Z7 尼康Z7现在卖多少钱?
2022-10-22 15:21:55
- 苹果iPhone手机灵动岛大热:安卓灵动岛App应用下载安装量超100万次
2022-10-03 22:13:45