python之函数filter、reduce
---恢复内容开始---
一、filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,对序列中每个元素进行for循环,然后将每个元素传递给第一个位置的函数,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
1、使用for循环将前面包含sb的文本过滤出来,
- moive_people = ['sb_alex','sb_wupeiqi','yuanhao','sb_lihaifeng']
- def filter_test(array):
- ret = []
- for p in array:
- if not p.startswith("sb"):
- ret.append(p)
- return ret
- print(filter_test(moive_people)) #['yuanhao']
2、将后面包含sb的文本过滤出来,如果还按照上面的方法写就显得很麻烦,而且代码重复,可以将for循环的主体部分使用函数定义独立出来,方便后续进行代码维护
- moive_people = ['alex_sb','sb_wupeiqi_sb','yuanhao','sb_lihaifeng_sb']
- def sb_show(n):
- return n.endswith('sb')
- def filter_test(func,array):
- ret = []
- for p in array:
- if not func(p):
- ret.append(p)
- return ret
- print(filter_test(sb_show,moive_people)) #['yuanhao']
备注:在上面的代码中,我将p.endswith()预先定义函数,然后后续直接调用函数,如果还有变化,只需要使用函数定义出来,然后直接调用;
3、对2的函数进行优化,将预先定义的sb_show函数使用lambda匿名函数进行替换,减少代码数量
- def filter_test(func,array):
- ret = []
- for p in array:
- if not func(p):
- ret.append(p)
- return ret
- print(filter_test(lambda n:n.endswith('sb'),moive_people))
4、filter函数
- moive_people = ['alex_sb','sb_wupeiqi_sb','yuanhao','sb_lihaifeng_sb']
- #下面的结果是一个内存地址,如果要获取值,需要进行list
- #<filter object at 0x0000026CB0A4FAC8>
- print(filter(lambda n:n.endswith('sb'),moive_people))
- #['alex_sb', 'sb_wupeiqi_sb', 'sb_lihaifeng_sb']
- print(list(filter(lambda n:n.endswith('sb'),moive_people)))
- #['alex_sb', 'sb_wupeiqi_sb', 'sb_lihaifeng_sb']
- res= filter(lambda n:n.endswith('sb'),moive_people)
- print(list(res))
二、reduce函数
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果
1、采用for循环的方法进行实现
- num1 = range(1,101)
- res= 0
- for i in num1:
- res = res+i
- print(res) #5050
2、使用函数的方式进行实现
- num1 = range(1,101)
- def reduce_test(array):
- res= 0
- for i in array:
- res = res+i
- return(res)
- print(reduce_test(num1)) #
3、对序列中的每个元素进行乘积
- num1 = range(1,6)
- def mul(x,y):
- return x*y
- def reduce_test(func,array):
- res =1
- for i in array:
- res = func(res,i)
- return res
- print(reduce_test(mul,num1))
4、对3函数进行优化
- def reduce_test(func,array):
- res =1
- for i in array:
- res = func(res,i)
- return res
- print(reduce_test(lambda x,y:x*y,num1))
5、对4函数进行优化,对函数增加一个默认参数
- num1 = [1,2,3,4,5,6]
- # def mul(x,y):
- # return x*y
- def reduce_test(func,array,init=None):
- if init is None:
- res = array.pop(0)
- else:
- res= init
- for i in array:
- print(i)
- res = func(res,i)
- return res
- print(reduce_test(lambda x,y:x*y,num1,100))
6、reduce函数
- from functools import reduce
- num1 = [1,2,3,4,5,6]
- print(reduce(lambda x,y:x+y,num1,1)) #
- print(reduce(lambda x,y:x*y,num1,10)) #
- print(reduce(lambda x,y:x/y,num1,100)) #0.1388888888888889
三、map函数
对序列中元素进行for循环,然后对每个元素进行逻辑处理
1、对列表中的元素进行平方处理
- num1 = [1,2,3,4,5,6]
- ret= []
- for i in num1:
- ret.append(i**2)
- print(ret)
2、对列表中的元素进行自增加1处理
- num1 = [1,2,3,4,5,6]
- ret= []
- for i in num1:
- ret.append(i+1)
- print(ret)
3、使用函数方式进行处理
- num1 = [1,2,3,4,5,6]
- def map_test(array):
- res =[]
- for i in array:
- res.append(i+1)
- return res
- print(map_test(num1)) #[2, 3, 4, 5, 6, 7]
4、对3函数进行优化,将for循环的主体代码部分预先使用函数进行定义
- num1 = [1,2,3,4,5,6]
- def reduce_one(x):
- return x+1
- def map_test(func,array):
- res =[]
- for i in array:
- res.append(func(i))
- return res
- print(map_test(reduce_one,num1)) #[2, 3, 4, 5, 6, 7]
如果需求有其他变化,只需要对将函数定义出来,然后进行调用就可以了
5、对4函数进行优化,使用lambda函数进行代替
- num1 = [1,2,3,4,5,6]
- # def reduce_one(x):
- # return x+1
- def map_test(func,array):
- res =[]
- for i in array:
- res.append(func(i))
- return res
- print(map_test(lambda x:x+1,num1)) #[2, 3, 4, 5, 6, 7]
6、map函数
- num1 = [1,2,3,4,5,6]
- print(map(lambda x:x+1,num1)) #<map object at 0x0000025C4059F908>
- print(list(map(lambda x:x+1,num1))) #[2, 3, 4, 5, 6, 7]
---恢复内容结束---
一、filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,对序列中每个元素进行for循环,然后将每个元素传递给第一个位置的函数,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
1、使用for循环将前面包含sb的文本过滤出来,
- moive_people = ['sb_alex','sb_wupeiqi','yuanhao','sb_lihaifeng']
- def filter_test(array):
- ret = []
- for p in array:
- if not p.startswith("sb"):
- ret.append(p)
- return ret
- print(filter_test(moive_people)) #['yuanhao']
2、将后面包含sb的文本过滤出来,如果还按照上面的方法写就显得很麻烦,而且代码重复,可以将for循环的主体部分使用函数定义独立出来,方便后续进行代码维护
- moive_people = ['alex_sb','sb_wupeiqi_sb','yuanhao','sb_lihaifeng_sb']
- def sb_show(n):
- return n.endswith('sb')
- def filter_test(func,array):
- ret = []
- for p in array:
- if not func(p):
- ret.append(p)
- return ret
- print(filter_test(sb_show,moive_people)) #['yuanhao']
备注:在上面的代码中,我将p.endswith()预先定义函数,然后后续直接调用函数,如果还有变化,只需要使用函数定义出来,然后直接调用;
3、对2的函数进行优化,将预先定义的sb_show函数使用lambda匿名函数进行替换,减少代码数量
- def filter_test(func,array):
- ret = []
- for p in array:
- if not func(p):
- ret.append(p)
- return ret
- print(filter_test(lambda n:n.endswith('sb'),moive_people))
4、filter函数
- moive_people = ['alex_sb','sb_wupeiqi_sb','yuanhao','sb_lihaifeng_sb']
- #下面的结果是一个内存地址,如果要获取值,需要进行list
- #<filter object at 0x0000026CB0A4FAC8>
- print(filter(lambda n:n.endswith('sb'),moive_people))
- #['alex_sb', 'sb_wupeiqi_sb', 'sb_lihaifeng_sb']
- print(list(filter(lambda n:n.endswith('sb'),moive_people)))
- #['alex_sb', 'sb_wupeiqi_sb', 'sb_lihaifeng_sb']
- res= filter(lambda n:n.endswith('sb'),moive_people)
- print(list(res))
二、reduce函数
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果
1、采用for循环的方法进行实现
- num1 = range(1,101)
- res= 0
- for i in num1:
- res = res+i
- print(res) #5050
2、使用函数的方式进行实现
- num1 = range(1,101)
- def reduce_test(array):
- res= 0
- for i in array:
- res = res+i
- return(res)
- print(reduce_test(num1)) #
3、对序列中的每个元素进行乘积
- num1 = range(1,6)
- def mul(x,y):
- return x*y
- def reduce_test(func,array):
- res =1
- for i in array:
- res = func(res,i)
- return res
- print(reduce_test(mul,num1))
4、对3函数进行优化
- def reduce_test(func,array):
- res =1
- for i in array:
- res = func(res,i)
- return res
- print(reduce_test(lambda x,y:x*y,num1))
5、对4函数进行优化,对函数增加一个默认参数
- num1 = [1,2,3,4,5,6]
- # def mul(x,y):
- # return x*y
- def reduce_test(func,array,init=None):
- if init is None:
- res = array.pop(0)
- else:
- res= init
- for i in array:
- print(i)
- res = func(res,i)
- return res
- print(reduce_test(lambda x,y:x*y,num1,100))
6、reduce函数
- from functools import reduce
- num1 = [1,2,3,4,5,6]
- print(reduce(lambda x,y:x+y,num1,1)) #
- print(reduce(lambda x,y:x*y,num1,10)) #
- print(reduce(lambda x,y:x/y,num1,100)) #0.1388888888888889
三、map函数
对序列中元素进行for循环,然后对每个元素进行逻辑处理
1、对列表中的元素进行平方处理
- num1 = [1,2,3,4,5,6]
- ret= []
- for i in num1:
- ret.append(i**2)
- print(ret)
2、对列表中的元素进行自增加1处理
- num1 = [1,2,3,4,5,6]
- ret= []
- for i in num1:
- ret.append(i+1)
- print(ret)
3、使用函数方式进行处理
- num1 = [1,2,3,4,5,6]
- def map_test(array):
- res =[]
- for i in array:
- res.append(i+1)
- return res
- print(map_test(num1)) #[2, 3, 4, 5, 6, 7]
4、对3函数进行优化,将for循环的主体代码部分预先使用函数进行定义
- num1 = [1,2,3,4,5,6]
- def reduce_one(x):
- return x+1
- def map_test(func,array):
- res =[]
- for i in array:
- res.append(func(i))
- return res
- print(map_test(reduce_one,num1)) #[2, 3, 4, 5, 6, 7]
如果需求有其他变化,只需要对将函数定义出来,然后进行调用就可以了
5、对4函数进行优化,使用lambda函数进行代替
- num1 = [1,2,3,4,5,6]
- # def reduce_one(x):
- # return x+1
- def map_test(func,array):
- res =[]
- for i in array:
- res.append(func(i))
- return res
- print(map_test(lambda x:x+1,num1)) #[2, 3, 4, 5, 6, 7]
6、map函数
- num1 = [1,2,3,4,5,6]
- print(map(lambda x:x+1,num1)) #<map object at 0x0000025C4059F908>
- print(list(map(lambda x:x+1,num1))) #[2, 3, 4, 5, 6, 7]
四、其他内置函数
1、zip函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。zip函数的作用类似于拉链
- print(list(zip(('张三'),(1,2))))#[('张', 1), ('三', 2)]
- print(zip(('张三'),(1,2))) #<zip object at 0x00000230F8D54B88>
- #[('M', 1), ('y', 2), (' ', 3)]
- print(list(zip(('My name is zhangsan'),(1,2,3))))
- print(list(zip(('My'),(1,2,3,4)))) #[('M', 1), ('y', 2)]
- ###使用zip函数将字典中的key与value值一一对应
- p = {'name':'alex','age':18,'gender':'none'}
- print(p.keys()) #dict_keys(['name', 'age', 'gender'])
- print(p.values()) #dict_values(['alex', 18, 'none'])
- print(list(p.keys())) #['name', 'age', 'gender']
- print(list(p.values())) #['alex', 18, 'none']
- #[('name', 'alex'), ('age', 18), ('gender', 'none')]
- print(list(zip(p.keys(),p.values())))
- print(zip(p.keys(),p.values())) #<zip object at 0x0000027B47A84F48>
2、max、min函数
(1)、单纯数字的比较
- l3 = [12,34,130,-1,44]
- print(max(l3)) #
- print(min(l3))#-1
(2)、字典的比较
- age_dict = {'age1':18,'age3':30,'age4':87}
- #求出年龄最大的
- print(max(age_dict.values())) #
- #默认比较key值
- print(max(age_dict))
- #求出年龄最大的keys与values
- print(list(max(zip(age_dict.values(),age_dict.keys())))) #[87, 'age4']
- l = [
- (1,'a'),
- (2,'b'),
- (3,'e'),
- (5,'f')
- ]
- print(max(l))
- l1 = ['a10','b13','d13']
- print(list(max(l1))) #['d', '1', '3']
- # l2 = ['a10','b13','d13',10]
- # #TypeError: '>' not supported between instances of 'int' and 'str'
- # print(list(max(l2)))
3、chr、ord函数
- # print(chr(97)) #a,chr的作用是将数字在ascii码表中的值显示出来
- # print(ord('c')) #99
- # print(chr(33)) #! ascii码表中的33对应的值为'!'
4、pow函数
- print(pow(2,3)) #2**3
- print(pow(2,3,2)) #2**3%2
5、reversed 反转
6、round四舍五入
7、set()转换为集合
8、slice() 切片
- l = 'hello'
- print(l[2:5])
- s= slice(3,5)
- s1 = slice(1,4,2)
- print(s)
9、sorted 排序
10、str
11、type
12、vars
13、__imprort__
14、eval
- ###将字符串中的结构给提取出来
- str_1 = "1+2*(5-1)-20/5"
- print(eval(str_1))
- str_2 = "{'k1':'1234','k2':'张三'}"
- print(eval(str_2))
15、hash
可hash的数据类型即为不可变数据类型,不可hash的数据类型即可变数据类型;
hash是一种算法、算法结构;
hash特性:
不管传入的参数多大,计算的hash值长度是不变的;
不能根据hash值去反推原参数;
变量不变hash值不变;
- name = "zhangsan"
- print(hash(name)) #-6633503532806232964
- print(hash(name)) #-6633503532806232964
- print(hash(name)) #-6633503532806232964
- name = "张三"
- print(hash(name)) #247632540932985384
16、bytes
17、encoding、decode
18、divmod
19、bin、hex、oct
- print(bin(32)) #十进制转二进制
- print(hex(32)) #十进制转16进制
- print(oct(32)) #十进制转8进制
- """
- 输出结果
- 0b100000
- 0x20
- 0o40
- """
20、globals、local
python之函数filter、reduce的更多相关文章
- Python 内置模块函数filter reduce
1.filter()实现过滤的功能 2.reduce()对序列中元素的连续操作可以通过循环来处理 3.map()对tuple元组进行解包操作,调用时设置map()的第一个参数为None 4.使用red ...
- Python中Lambda, filter, reduce and map 的区别
Lambda, filter, reduce and map Lambda Operator Some like it, others hate it and many are afraid of t ...
- python基础--内置函数filter,reduce
movie_people=["sb+_alex","sb_wupeiqi","han"] # def filter_test(array): ...
- Python中map,filter,reduce,zip的应用
事例1: l=[('main', 'router_115.236.xx.xx', [{'abc': 1}, {'dfg': 1}]), ('main', 'router_183.61.xx.xx', ...
- Python高级函数--map/reduce
名字开头大写 后面小写:练习: def normalize(name): return name[0].upper() + name[1:].lower() L1 = ['adam', 'LISA', ...
- Python高级函数--filter
def is_palindrome(n): return str(n) == str(n)[::-1] #前两个‘:’表示整个范围,‘-’表示从后面,‘1’表示数据间隔 output = filter ...
- 【python】函数filter、map
- Python【map、reduce、filter】内置函数使用说明(转载)
转自:http://www.blogjava.net/vagasnail/articles/301140.html?opt=admin 介绍下Python 中 map,reduce,和filter 内 ...
- Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...
随机推荐
- C# - VS2019WinFrm桌面应用程序FtpClient实现
前言 本篇主要记录:VS2019 WinFrm桌面应用程序实现简单的FtpClient,包含Ftp文件查看.上传和下载等功能. 准备工作 搭建WinFrm前台界面 添加必要的控件,这里主要应用到Gro ...
- 腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践
腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.md 开通腾讯云服务器和Mysql 知识点: ASP.NET Core和 Entity Framework Core的使用 L ...
- 关联mysql失败_Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon' 时区错误
时区错误,MySQL默认的时区是UTC时区,比北京时间晚8个小时. 所以要修改mysql的时长 在mysql的命令模式下,输入: set global time_zone='+8:00'; 再次连接成 ...
- Java获取客户端真实IP地址
Java代码 import javax.servlet.http.HttpServletRequest; /** * 获取对象的IP地址等信息 */ public class IPUtil { /** ...
- Ext学习之路——Ext.application
Ext.application({ name: 'MyApp', launch: function() { Ext.create('Ext.container.Viewport', { items: ...
- iframe子元素无法全屏
最近做的项目中遇到的问题: 在最新的Chrome浏览器中,全屏功能正常 在旧版本Chrome浏览器中(与最新版版本号相差二十左右),全屏功能无效 在IE11浏览器中,全屏功能无效 反复排查,发现该项目 ...
- Linux signal与定时器
1. signal sighandler_t signal(int signum, sighandler_t handler); signum:是一个信号.除了SIGKILL和SIGSTOP外的任何一 ...
- 常用邮箱SMTP服务器地址大全
常用邮箱SMTP服务器地址大全 阿里云邮箱(mail.aliyun.com) POP3服务器地址:pop3.aliyun.com(SSL加密端口:995:非加密端口:110) SMTP服务器地址:sm ...
- 201871010126 王亚涛 《面向对象程序设计 Java》 第十五周学习总结
内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11 ...
- 201871010126 王亚涛《面向对象程序设计(Java)》第十二周学习总结
内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...