16.高阶函数
# 00.匿名函数
f = lambda x,y,z:x+y+z
def F(x,y,z):
return x+y+z
f = lambda x:x if x % 2 != 0 else x + 100
print(f(10)) # 110
1
2
3
4
5
6
2
3
4
5
6
- 三元运算
name = 'Tom' if 1 == 1 else 'fly'
print(name)
# 运行结果: Tom
1
2
3
2
3
# 01.filter
- filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。
- 最终一次性返回过滤后的结果。
- filter()函数有两个参数:
- 第一个,自定函数名,必须的
- 第二个,需要过滤的列,也是必须的
- 利用 filter、lambda表达式 获取l1中元素小于33的所有元素 l1 = [11, 22, 33, 44, 55]
l1= [11,22,33,44,55]
a = filter(lambda x: x<33, l1)
print(list(a))
1
2
3
2
3
# -*- coding:utf8 -*-
def F(x):
if x<33:
return x
b = filter(F,l1)
print(list(b))111
1
2
3
4
5
6
2
3
4
5
6
# 输入 '102304' ==> ['1', '2', '3', '4']
l1= '102304'
a = filter(lambda x: x !='0', l1)
print(list(a))
1
2
3
4
2
3
4
# 02.map
- 第一个参数接收一个函数名,第二个参数接收一个可迭代对象
- 利用map,lambda表达式将所有偶数元素加100
# -*- coding:utf8 -*-
l1= [11,22,33,44,55]
ret = map(lambda x:x-100 if x % 2 != 0 else x + 100,l1)
print(list(ret))
# 运行结果: [-89, 122, -67, 144, -45]
# lambda x:x-100 if x % 2 != 0 else x + 100
# 如果 "if x % 2 != 0" 条件成立返回 x-100
# 不成立:返回 x+100
def F(x):
if x%2 != 0:
return x-100
else:
return x+100
ret = map(F,l1)
print(list(ret))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 03.reduce
- 字符串反转
# -*- coding:utf8 -*-
'''使用reduce将字符串反转'''
s = 'Hello World'
from functools import reduce
result = reduce(lambda x,y:y+x,s)
# # 1、第一次:x=H,y=e => y+x = eH
# # 2、第二次:x=l,y=eH => y+x = leH
# # 3、第三次:x=l,y=leH => y+x = lleH
print( result ) # dlroW olleH
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 04.sorted
- 经典面试题只 列表排序
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
# [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
print( sorted(students, key=lambda s: s[2], reverse=False) ) # 按年龄排序
# 结果:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
def f(x):
# ('john', 'A', 15)
return x[2]
print( sorted(students, key=f, reverse=False) ) # 按年龄排序
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 对字典的value排序
d = {'k1':1, 'k3': 3, 'k2':2}
# d.items() = [('k1', 1), ('k3', 3), ('k2', 2)]
a = sorted(d.items(), key=lambda x: x[1])
print(a) # [('k1', 1), ('k2', 2), ('k3', 3)]
1
2
3
4
2
3
4
- 两个列表编一个字典
L1 = ['k1','k2','k3']
L2 = ['v1','v2','v3']
print( list(zip(L1,L2)))
# zip(L1,L2) : [('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]
# dict( [('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')] ) = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
1
2
3
4
5
2
3
4
5
上次更新: 2024/10/15 16:27:13