17_python笔记-高阶函数


博客cpen_web

练习1 把一个序列中的空字符串删掉

把一个序列中的空字符串删掉,[‘A’, ‘’, ‘B’, None, ‘C’, ’ ', ‘a’, 1, 0]
[‘A’, ‘B’, ‘C’, ‘a’, 1]

示例

#  把一个序列中的空字符串删掉,['A', '', 'B', None, 'C', '  ', 'a', 1, 0]
#['A', 'B', 'C', 'a', 1]
list5 = ['A', '', 'B', None, 'C', '  ', 'a', 1, 0]
print(list(filter(None,list5)))
#结果为 ['A', 'B', 'C', '  ', 'a', 1]
print(list(filter(lambda x:x ,list5)))
#结果为 ['A', 'B', 'C', '  ', 'a', 1]
print(list(filter(lambda x:x and str(x).strip(),list5)))    # 注:返回x为空并且x.strip()也为真
#结果为 ['A', 'B', 'C', 'a', 1]
#注:去除首尾空白字符
>>> a = " 123 456 "
>>> a.strip()						# 注:去除首尾空白字符
'123 456'

知识点2 水仙花数

水仙花数 输出100-999以内的水仙花数
水仙花数153 = 1的三次方+5的三次方+3的三次方

示例1:x//100百位数 ;x//10%10十位数 ;x%10个位数

result = filter(lambda x:(x//100)**3+(x//10%10)**3+(x%10)**3==x,range(100,1000))
print(list(result))
#结果为 [153, 370, 371, 407]
#注:x//100百位数 ;x//10%10十位数 ;x%10个位数

示例2:转化成str

def func01(x):
    num = str(x)
    return int(num[0])**3 + int(num[1])**3 + int(num[2])**3 == x
result = filter(func01,range(100,1000))
print(list(result))
#结果为 [153, 370, 371, 407]
>>> a=112
>>> str(a)[0]
'1'
>>> str(a)[1]
'1'
>>> str(a)[2]
'2'

知识点3 常用高阶函数-sorted

常用高阶函数-sorted
用Python-sorted代码实现:按绝对值大小排序
sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序
key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。
对比原始的list和经过key=abs处理过的list: # 注:排的还是原来的数
·执行语句:sorted([36, 5, -12, 9, -21], key=abs)

  1. 原始字符:list = [36, 5, -12, 9, -21]
  2. 经过key-abs对应得到:[36, 5, 12, 9, 21]
  3. 按照keys-abs排序结果:[5, 9, 12, 21, 36]
  4. 原始字符串最终结果:[5, 9, -12, -21, 36]
#sorted 排序
#用key来执行排序规则函数,只能传1个参数
#排序类型必须一致
#全为布尔型 可以排序
#按照字符串长度排序
#忽略大小写进行排序
#元组的排序,先比较第一个值,再比较第二个,依次类推

示例1:内建函数abs 取绝对值

#注:内建函数abs 取绝对值
>>> abs(-11)
11
>>> abs(11)
11
>>> type(abs(11))			# 注:接收整型,返回整型
<class 'int'>

示例2:sorted(a)和a.sort()

>>> a = [1,2,4,3,0]		# 注:不会改变a的值
>>> sorted(a)				# 注:从小到大排序
[0, 1, 2, 3, 4]
>>> a.sort()				# 注:会改变a的值
>>> a
[0, 1, 2, 3, 4]

示例3:排序类型必须一致

#注:排序类型必须一致
>>> a
[0, 1, 2, 3, 4]
>>> a.append(a)
>>> sorted(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'list' and 'int'

示例4:全为布尔型,可以排序

#注:可以排序,底层 False 0 ; True 1
>>> a = [1,True,0,False,"c"=="c"]
>>> sorted(a)
[0, False, 1, True, True]

示例5:按照字符串长度排序

#注:按照首字母的ASCII码排序
>>> a = ["abc","defg","123456","1","sbbbfg"]
>>> sorted(a)
['1', '123456', 'abc', 'defg', 'sbbbfg']
#注:按照字符串长度排序
>>> sorted(a,key=len)
['1', 'abc', 'defg', '123456', 'sbbbfg']

示例6:元组排序

#元组排序 先比较第一个元素,再比较第二个元素
#元组的排序,先比较第一个值,再比较第二个,依次类推
>>> a=[(1,2),(2,2),(1,0),(2,4),(True,False)]
>>> sorted(a)
[(1, 0), (True, False), (1, 2), (2, 2), (2, 4)]
>>> sorted(a,reverse=True)						# 注:反序 reverse=True
[(2, 4), (2, 2), (1, 2), (1, 0), (True, False)]

练习4 忽略大小写进行排序

把一个序列中的字符串,忽略大小写排序
序列:[‘bob’, ‘about’, ‘Zoo’, ‘Credit’]
结果:[‘about’, ‘bob’, ‘Credit’, ‘Zoo’]

示例

>>> b = "AbC"
>>> b.lower()
'abc'
>>> a=['bob', 'about', 'Zoo', 'Credit']
>>> sorted(a)
['Credit', 'Zoo', 'about', 'bob']
>>> sorted(a,key=str.lower)					# 注:str  string类
['about', 'bob', 'Credit', 'Zoo']

知识点5 常用高阶函数-reduce

常用高阶函数-reduce
用Python-reduce代码实现:将列表[1,3,5,7,9],变成整数13579
·reduce把一个函数作用在一个序列[x1, x2, x3, …]上
·这个函数必须接收两个参数
·reduce把结果继续和序列的下一个元素做累积计算
·reduce(f, [x1, x2, x3, x4]) => f(f(f(x1, x2), x3), x4)

示例1:[1,2,3,4] --> 转化成1234

a = [1,2,3,4]   # --> 转化成1234
msg = str()
for i in a:
    msg += str(i)
print(int(msg))
#结果为 1234
#方法1
a = [1,2,3,4]
result = map(lambda x:str(x),a)	# 注:转换为字符串
b = list(result)
c=''
for i in b:
    c += i
print(int(c))
#结果为 1234
#方法2
a = [1,2,3,4]
b = int("".join(map(str,a)))		# 注:最简单的方式
print(b)
#结果为 1234
#方法3
a = [1,2,3,4]   # --> 转化成1234	# 注:数学方式
b = a[::-1]
c = 0
for i in range(len(b)):
    c += b[i]*10**i
print(c)
#结果为 1234

示例2:reduce [1,2,3,4] --> 转化成1234

#reduce
from functools import reduce		# 注:导入模块
a = [1,2,3,4]
def func1(x,y):			# 注:这个函数接收2个参数
    return x*10+y
print(reduce(func1,a))
#结果为 1234

#第一次执行传参
#func1  传参 1 2  返回12
#第二次执行传参    12  3   返回123
#第三次传参  123 4   返回1234

示例3:reduce 实现python的int功能

实现python的int功能
reduce => ‘123’ => 123

#方法1
#str --> int(自己实现int函数的功能)
from functools import reduce
a = input("输入想要转化的数字:")
b = {'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'0':0}
c = list(map(lambda i:b.get(i),a))
print(c)
def func(x,y):
    return x*10+y
result = reduce(func,c)
print(result,type(result))
#方法2
from functools import reduce
a = {"0":0,"1":1,"2":2,"3":3}
d=0
def func1(x,y):
    global d
    if len(x+y) == len(b):
        for i in range(len(x+y)):
            d+=a.get((x+y)[::-1][i])*10**i
        return d
    return x+y

b='123'
print(reduce(func1,b))
print(type(reduce(func1,b)))
#结果为 123
#<class 'int'>

练习6 验证用户名

利用map批量检测用户名是否符合规范=> username符合规范, username不符合规范
只能包含数据、字母、下划线,不以数字开头,长度在6-18之间
filter把合法的用户名显示出来

示例

lst = ["wy123456_789","123","wy#1234567","123wyyyyyyyyyyy"]
#利用map批量检测用户名是否符合规范=> username符合规范, username不符合规范
#--> ["wy123456_789符合规范","123不符合规范"...]
import re
def func01(x):
    if re.findall('^[a-zA-Z_]\w{5,17}$', x):
        return f"{x}符合规范"
    else:
        return f"{x}不符合规范"
result = map(func01, lst)
print(list(result))
#结果为 ['wy123456_789符合规范', '123不符合规范', 'wy#1234567不符合规范', '123wyyyyyyyyyyy不符合规范']
#filter把合法的用户名显示出来
print(list(filter(lambda x:re.findall('^[a-zA-Z_]\w{5,17}$', x),lst)))
#结果为 ['wy123456_789']

练习7 实现阶乘

匿名函数+reduce实现 123*…*n

示例

#实现阶乘
from functools import reduce
n = int(input("输入"))
redu =reduce(lambda x,y:x*y,range(1,n+1))
print(redu)
#结果为 输入:4
#24

知识点8 总结

总结
函数编程
·通过拆分代码,实现功能模块
·每一个函数都是实现一个功能(登录、注册、点歌…)
函数式编程
·定义了一些实现的方法
·允许把函数作为参数传到另一个函数中
·允许返回值是一个函数
函数编程和函数式编程
·函数编程:做什么 => 具体实现的内容
·函数式编程:怎么做 => 思路,方法 => 抽象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mycpen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值