python高阶函数

1、map() / reduce()

     map (函数,Iterable) :map将函数依次作用到Iterable每个元素上,把结果作为新的Iterable返回

#实现函数:f(x)=x*x
#作用在list[1,2,3,4,5,6,7,8,9]上
def f(x):
	return x*x
	
r=list(map(f,[1,2,3,4,5,6,7,8,9]))
print(r)

reduce():把结果继续累积到下一运算中

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
2、 filter():把传入的函数依次作用于每个元素,返回True/False决定保留/丢弃该元素

3、sorted():可以对list进行排序,后加key=可以自定义排序,再加reverse=True 反向排序

#单纯排序
>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]

#自定义排序
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
【练习】


1、利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:

def transform(name):
	return name.capitalize()
	
s=list(map(transform,['adam', 'LISA', 'barT']))
print(s)
2、Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积:

#!/usr/bin/env python3
#coding=gbk
from functools import reduce

def prod(L):
	def p(x,y):
		return x*y
	s=reduce(p,L)
	return s
	
S=[1,3,5,2,5]
print(prod(S))
3、利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:

#!/usr/bin/env python3
#coding=gbk
from functools import reduce

def str2float(L):
	def char2num(L):
		digits={'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,',':0}
		return digits[L]
	def str2int(x,y):
		return x*10+y
	def str2dec(x,y):
		return x/10+y
	inte,dec=L.split('.',1) #split 符号分割符 遇到'.'符号 分割一次	
	return reduce(str2int,map(char2num,inte))+reduce(str2dec,map(char2num,dec[::-1]))*0.1
	#[::-1]全部数由右末尾1位1位取
	#*0.1 是因为最后一位还在小数点左侧
print(str2float('123.456'))
4、回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数:

def findrl(s):
	return str(s)==str(s)[::-1]

output=filter(findrl,range(1,1000))
print(list(output))
5、

假设我们用一组tuple表示学生名字和成绩:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

请用sorted()对上述列表分别按名字排序:再按成绩从高到低排序:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 

#1
print(sorted(L))

#2
def transposition(t):
	return (t[1],t[0])
	
print(sorted(L,key=transposition,reverse=True))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值