python filter函数参数可以是_python之函数filter、reduce

---恢复内容开始---

一、filter函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,对序列中每个元素进行for循环,然后将每个元素传递给第一个位置的函数,然后返回 True 或 False,最后将返回 True 的元素放到新列表中

1、使用for循环将前面包含sb的文本过滤出来,

moive_people = ['sb_alex','sb_wupeiqi','yuanhao','sb_lihaifeng']deffilter_test(array):

ret=[]for p inarray:if not p.startswith("sb"):

ret.append(p)returnretprint(filter_test(moive_people)) #['yuanhao']

2、将后面包含sb的文本过滤出来,如果还按照上面的方法写就显得很麻烦,而且代码重复,可以将for循环的主体部分使用函数定义独立出来,方便后续进行代码维护

1 moive_people = ['alex_sb','sb_wupeiqi_sb','yuanhao','sb_lihaifeng_sb']2 defsb_show(n):3 return n.endswith('sb')4 deffilter_test(func,array):5 ret =[]6 for p inarray:7 if notfunc(p):8 ret.append(p)9 returnret10 print(filter_test(sb_show,moive_people)) #['yuanhao']

备注:在上面的代码中,我将p.endswith()预先定义函数,然后后续直接调用函数,如果还有变化,只需要使用函数定义出来,然后直接调用;

3、对2的函数进行优化,将预先定义的sb_show函数使用lambda匿名函数进行替换,减少代码数量

1 deffilter_test(func,array):2 ret =[]3 for p inarray:4 if notfunc(p):5 ret.append(p)6 returnret7 print(filter_test(lambda n:n.endswith('sb'),moive_people))

4、filter函数

1 moive_people = ['alex_sb','sb_wupeiqi_sb','yuanhao','sb_lihaifeng_sb']2 #下面的结果是一个内存地址,如果要获取值,需要进行list

3 #

4 print(filter(lambda n:n.endswith('sb'),moive_people))5 #['alex_sb', 'sb_wupeiqi_sb', 'sb_lihaifeng_sb']

6 print(list(filter(lambda n:n.endswith('sb'),moive_people)))7 #['alex_sb', 'sb_wupeiqi_sb', 'sb_lihaifeng_sb']

8 res= filter(lambda n:n.endswith('sb'),moive_people)9 print(list(res))

二、reduce函数

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果

1、采用for循环的方法进行实现

1 num1 = range(1,101)2 res=03 for i innum1:4 res = res+i5

6 print(res) #5050

2、使用函数的方式进行实现

1 num1 = range(1,101)2 defreduce_test(array):3

4 res=05 for i inarray:6 res = res+i7 return(res)8 print(reduce_test(num1)) #5050

3、对序列中的每个元素进行乘积

1 num1 = range(1,6)2 defmul(x,y):3 return x*y4 defreduce_test(func,array):5 res =1

6 for i inarray:7 res =func(res,i)8 returnres9 print(reduce_test(mul,num1))

4、对3函数进行优化

1 defreduce_test(func,array):2 res =1

3 for i inarray:4 res =func(res,i)5 returnres6 print(reduce_test(lambda x,y:x*y,num1))

5、对4函数进行优化,对函数增加一个默认参数

1 num1 = [1,2,3,4,5,6]2 #def mul(x,y):

3 #return x*y

4 def reduce_test(func,array,init=None):5 if init isNone:6 res =array.pop(0)7 else:8 res=init9 for i inarray:10 print(i)11 res =func(res,i)12 returnres13 print(reduce_test(lambda x,y:x*y,num1,100))

6、reduce函数

1 from functools importreduce2 num1 = [1,2,3,4,5,6]3

4 print(reduce(lambda x,y:x+y,num1,1)) #22

5 print(reduce(lambda x,y:x*y,num1,10)) #7200

6 print(reduce(lambda x,y:x/y,num1,100)) #0.1388888888888889

三、map函数

对序列中元素进行for循环,然后对每个元素进行逻辑处理

1、对列表中的元素进行平方处理

1 num1 = [1,2,3,4,5,6]2 ret=[]3 for i innum1:4 ret.append(i**2)5 print(ret)

2、对列表中的元素进行自增加1处理

1 num1 = [1,2,3,4,5,6]2 ret=[]3 for i innum1:4 ret.append(i+1)5 print(ret)

3、使用函数方式进行处理

1 num1 = [1,2,3,4,5,6]2 defmap_test(array):3 res =[]4 for i inarray:5 res.append(i+1)6 returnres7 print(map_test(num1)) #[2, 3, 4, 5, 6, 7]

4、对3函数进行优化,将for循环的主体代码部分预先使用函数进行定义

1 num1 = [1,2,3,4,5,6]2 defreduce_one(x):3 return x+1

4 defmap_test(func,array):5 res =[]6 for i inarray:7 res.append(func(i))8 returnres9 print(map_test(reduce_one,num1)) #[2, 3, 4, 5, 6, 7]

如果需求有其他变化,只需要对将函数定义出来,然后进行调用就可以了

5、对4函数进行优化,使用lambda函数进行代替

1 num1 = [1,2,3,4,5,6]2 #def reduce_one(x):

3 #return x+1

4 defmap_test(func,array):5 res =[]6 for i inarray:7 res.append(func(i))8 returnres9 print(map_test(lambda x:x+1,num1)) #[2, 3, 4, 5, 6, 7]

6、map函数

1 num1 = [1,2,3,4,5,6]2 print(map(lambda x:x+1,num1)) #

3 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']deffilter_test(array):

ret=[]for p inarray:if not p.startswith("sb"):

ret.append(p)returnretprint(filter_test(moive_people)) #['yuanhao']

2、将后面包含sb的文本过滤出来,如果还按照上面的方法写就显得很麻烦,而且代码重复,可以将for循环的主体部分使用函数定义独立出来,方便后续进行代码维护

1 moive_people = ['alex_sb','sb_wupeiqi_sb','yuanhao','sb_lihaifeng_sb']2 defsb_show(n):3 return n.endswith('sb')4 deffilter_test(func,array):5 ret =[]6 for p inarray:7 if notfunc(p):8 ret.append(p)9 returnret10 print(filter_test(sb_show,moive_people)) #['yuanhao']

备注:在上面的代码中,我将p.endswith()预先定义函数,然后后续直接调用函数,如果还有变化,只需要使用函数定义出来,然后直接调用;

3、对2的函数进行优化,将预先定义的sb_show函数使用lambda匿名函数进行替换,减少代码数量

1 deffilter_test(func,array):2 ret =[]3 for p inarray:4 if notfunc(p):5 ret.append(p)6 returnret7 print(filter_test(lambda n:n.endswith('sb'),moive_people))

4、filter函数

1 moive_people = ['alex_sb','sb_wupeiqi_sb','yuanhao','sb_lihaifeng_sb']2 #下面的结果是一个内存地址,如果要获取值,需要进行list

3 #

4 print(filter(lambda n:n.endswith('sb'),moive_people))5 #['alex_sb', 'sb_wupeiqi_sb', 'sb_lihaifeng_sb']

6 print(list(filter(lambda n:n.endswith('sb'),moive_people)))7 #['alex_sb', 'sb_wupeiqi_sb', 'sb_lihaifeng_sb']

8 res= filter(lambda n:n.endswith('sb'),moive_people)9 print(list(res))

二、reduce函数

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果

1、采用for循环的方法进行实现

1 num1 = range(1,101)2 res=03 for i innum1:4 res = res+i5

6 print(res) #5050

2、使用函数的方式进行实现

1 num1 = range(1,101)2 defreduce_test(array):3

4 res=05 for i inarray:6 res = res+i7 return(res)8 print(reduce_test(num1)) #5050

3、对序列中的每个元素进行乘积

1 num1 = range(1,6)2 defmul(x,y):3 return x*y4 defreduce_test(func,array):5 res =1

6 for i inarray:7 res =func(res,i)8 returnres9 print(reduce_test(mul,num1))

4、对3函数进行优化

1 defreduce_test(func,array):2 res =1

3 for i inarray:4 res =func(res,i)5 returnres6 print(reduce_test(lambda x,y:x*y,num1))

5、对4函数进行优化,对函数增加一个默认参数

1 num1 = [1,2,3,4,5,6]2 #def mul(x,y):

3 #return x*y

4 def reduce_test(func,array,init=None):5 if init isNone:6 res =array.pop(0)7 else:8 res=init9 for i inarray:10 print(i)11 res =func(res,i)12 returnres13 print(reduce_test(lambda x,y:x*y,num1,100))

6、reduce函数

1 from functools importreduce2 num1 = [1,2,3,4,5,6]3

4 print(reduce(lambda x,y:x+y,num1,1)) #22

5 print(reduce(lambda x,y:x*y,num1,10)) #7200

6 print(reduce(lambda x,y:x/y,num1,100)) #0.1388888888888889

三、map函数

对序列中元素进行for循环,然后对每个元素进行逻辑处理

1、对列表中的元素进行平方处理

1 num1 = [1,2,3,4,5,6]2 ret=[]3 for i innum1:4 ret.append(i**2)5 print(ret)

2、对列表中的元素进行自增加1处理

1 num1 = [1,2,3,4,5,6]2 ret=[]3 for i innum1:4 ret.append(i+1)5 print(ret)

3、使用函数方式进行处理

1 num1 = [1,2,3,4,5,6]2 defmap_test(array):3 res =[]4 for i inarray:5 res.append(i+1)6 returnres7 print(map_test(num1)) #[2, 3, 4, 5, 6, 7]

4、对3函数进行优化,将for循环的主体代码部分预先使用函数进行定义

1 num1 = [1,2,3,4,5,6]2 defreduce_one(x):3 return x+1

4 defmap_test(func,array):5 res =[]6 for i inarray:7 res.append(func(i))8 returnres9 print(map_test(reduce_one,num1)) #[2, 3, 4, 5, 6, 7]

如果需求有其他变化,只需要对将函数定义出来,然后进行调用就可以了

5、对4函数进行优化,使用lambda函数进行代替

1 num1 = [1,2,3,4,5,6]2 #def reduce_one(x):

3 #return x+1

4 defmap_test(func,array):5 res =[]6 for i inarray:7 res.append(func(i))8 returnres9 print(map_test(lambda x:x+1,num1)) #[2, 3, 4, 5, 6, 7]

6、map函数

1 num1 = [1,2,3,4,5,6]2 print(map(lambda x:x+1,num1)) #

3 print(list(map(lambda x:x+1,num1))) #[2, 3, 4, 5, 6, 7]

四、其他内置函数

1、zip函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。zip函数的作用类似于拉链

1 print(list(zip(('张三'),(1,2))))#[('张', 1), ('三', 2)]

2 print(zip(('张三'),(1,2))) #

3 #[('M', 1), ('y', 2), (' ', 3)]

4 print(list(zip(('My name is zhangsan'),(1,2,3))))5 print(list(zip(('My'),(1,2,3,4)))) #[('M', 1), ('y', 2)]

6

7 ###使用zip函数将字典中的key与value值一一对应

8 p = {'name':'alex','age':18,'gender':'none'}9 print(p.keys()) #dict_keys(['name', 'age', 'gender'])

10 print(p.values()) #dict_values(['alex', 18, 'none'])

11 print(list(p.keys())) #['name', 'age', 'gender']

12 print(list(p.values())) #['alex', 18, 'none']

13 #[('name', 'alex'), ('age', 18), ('gender', 'none')]

14 print(list(zip(p.keys(),p.values())))15 print(zip(p.keys(),p.values())) #

2、max、min函数

(1)、单纯数字的比较

1 l3 = [12,34,130,-1,44]2 print(max(l3)) #130

3 print(min(l3))#-1

(2)、字典的比较

1 age_dict = {'age1':18,'age3':30,'age4':87}2 #求出年龄最大的

3 print(max(age_dict.values())) #87

4 #默认比较key值

5 print(max(age_dict))6 #求出年龄最大的keys与values

7

8 print(list(max(zip(age_dict.values(),age_dict.keys())))) #[87, 'age4']

1 l =[2 (1,'a'),3 (2,'b'),4 (3,'e'),5 (5,'f')6 ]7 print(max(l))8

9

10 l1 = ['a10','b13','d13']11 print(list(max(l1))) #['d', '1', '3']

12

13 #l2 = ['a10','b13','d13',10]

14 ##TypeError: '>' not supported between instances of 'int' and 'str'

15 #print(list(max(l2)))

3、chr、ord函数

1 #print(chr(97)) #a,chr的作用是将数字在ascii码表中的值显示出来

2 #print(ord('c')) #99

3 #print(chr(33)) #! ascii码表中的33对应的值为'!'

4、pow函数

1 print(pow(2,3)) #2**3

2 print(pow(2,3,2)) #2**3%2

5、reversed 反转

6、round四舍五入

7、set()转换为集合

8、slice() 切片

1 l = 'hello'

2 print(l[2:5])3 s= slice(3,5)4 s1 = slice(1,4,2)5 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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部