Python:匿名函数-字典排序-高阶函数(map filter reduce)

‘’’
分数积
编写一个函数 输入为偶数时调用1/2+1/4+…+1/n
输入为奇数时调用1/3+1/5+…+1/n
‘’’
#1.偶函数

def dSum(n):

x=0

for i in range(2,n+2,2):

x+=1/i

return x

def oSum(n):

x=0

for i in range(1,n+2,2):

x+=1/i

return x

def main():

num=int(input(‘请输入一个数:’))

if num%2==0:

w=dSum(num)

print(‘偶数积为:%f’%w)

else:

w=oSum(num)

print(‘奇数积为:%f’%w)

main()

‘’’
递归函数
‘’’

def main(n):

print(‘进入第%d层’%n)

if n==3:

print(‘到达潜意识区’)

else:

main(n+1)

print(‘从第%d层醒来’%n)

def main(n):

print(‘进入第%d层’%n)

if n==3:

print(‘到达潜意识区’)

else:

def main(n):

print(‘进入第%d层’ % n)

if n == 3:

print(‘到达潜意识区’)

else:

def main(n):

print(‘进入第%d层’ % n)

if n == 3:

print(‘到达潜意识区’)

else:

# main(n+1)

print(‘从第%d层醒来’ % n)

# main(n+1)

print(‘从第%d层醒来’ % n)

# main(n+1)

print(‘从第%d层醒来’%n)

main(1)#第一次调用 进入第1层

#第二次调用 进入第2层

#第三次调用 进入第3层 到达潜意识区

#从第3层醒来 结束第三次调用

#从第2层醒来 结束第2次调用

#从第1层醒来 结束第1次调用

‘’’
阶乘
‘’’
def jc(x):
if x==1:
return 1
else:
return x*jc(x-1)#阶乘通式
‘’’
匿名函数
lambda [参数]:表达式
默认返回一个表达式
‘’’
#无参数
a=lambda :‘妈卖批’ #声明一个匿名函数并赋值给a
print(a()) #通过调用匿名函数打印输出
#有参数
s=lambda x: x3 #声明一个参数x
print(s(3))
#多个参数
s=lambda x,y: x
y
print(s(3,4))
‘’’
矢量化的三元运算符
if 条件:
代码
else:
代码
条件成立的内容 if 条件 else 条件不成立的内容

‘’’
s=lambda x,y: x if x<=2 else y #如果x<=2 返回结果X否则y
print(s(3,4))

‘’’
字典排序
‘’’

dic={‘c’:1,‘b’:3,‘a’:2}

dic=sorted(dic.items(),key=lambda x:x[1],reverse=True) #排序,返回排序后的list 内置函数有返回值 默认KEY值

#reverse=True 逆序排序
#items()可以将一个字典转换为键值对的元组列表
#key=lambda x:x[0] 按照第0个元素排序

print(dic)

print({k:v for k,v in dic}) #字典推导式

list=[

{‘name’:‘ausam’,‘age’:‘18’},

{‘name’:‘bun’,‘age’:‘19’},

{‘name’:‘cus’,‘age’:‘20’}

]

list=sorted(list,key=lambda x:x[‘name’],reverse=True)

print(list)

‘’’
高阶函数
‘’’
#map

list01=[1,2,3,4,5]

new_list=map(lambda x:x*2,list01) #根据函数给指定的序列做映射然后返回一个新的map对象

print(list(new_list)) #将map对象转化为list集合

for i in new_list:

print(i)

#filter:过滤不符合的元素 将符合的元素组成新的序列

list01=[1,3,5,7,9]

new_list=filter(lambda x:x>=3,list01)

print(list(new_list))

for i in new_list:

print(i)

#reduce #对序列中所用的元素进行合并 可以给定一个初始值

list02=[2,3,6,8,9,21]

from functools import reduce

new_list=reduce(lambda x,y:x*y,list02)

print(new_list)

‘’’
map filter reduce 需要通过序列显示打印输出
案例一:格式化用户的英文名,要求首字母大小,其它字母小写
案例二:将用户英文名、年龄、性别三个集合的数据结合到一起,形成一个集合
案例三:过滤性别为男的用户
案例四:求性别为男的用户的平均年龄

‘’’
name=[‘suma’,‘tom’,‘jon’,‘yed’]
age=[12,13,15,16]
sex=[‘m’,‘w’,‘m’,‘w’]
#1.格式化用户的英文名,要求首字母大小,其它字母小写
new_name=map(lambda x:x.title(),name)
new_name=list(new_name) #返回新的map对象只能通过序列显示打印
print(new_name)
#2.将用户英文名、年龄、性别三个集合的数据结合到一起,形成一个集合
user=map(lambda x,y,z:(x,y,z),name,age,sex)
user=list(user)
print(user)
#3.过滤性别为男的用户
user=filter(lambda x:x[2]==‘m’,user) #已经生成了新的对象user
user=list(user)
print(user)
#求性别为男的用户的平均年龄
from functools import reduce
user_age=reduce(lambda x,y:x[1]+y[1],user)

user_age=reduce(lambda x,y:x+y[1],user,0)

print(user_age/len(user))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值