python 高阶函数:sort,filter,reduce,map

#-*- coding :UTF-8 -*-
#python 函数式编程
#允许把函数本身作为参数,传入另一个函数,还允许返回一个函数
#===>高度抽象的编程方法

#1,map()
#两个传入参数:函数对象;Iterable(list,turple,dict)
def multi(x):
    a=x*x
    return a
r=map(multi,[1,2,3,4,5])
#r是一个惰性序列,需要用list计算
print(list(r))


#2,reduce()
#reduce 把一个函数作用在一个序列上
#reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)
from functools import reduce
def add(x,y):
    a=x+y
    return a
r=reduce(add,[1,2,3,4,5,6])
print(r)

def char2num(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
def num(x,y):
    a=x*10+y
    return a
print(reduce(num,map(char2num,'13579')))

#practice1 intput['adam', 'LISA', 'barT'],output['Adam', 'Lisa', 'Bart']
def normalize(word):
    first=word[0].upper()
    rest=word[1:].lower()
    return first+rest
L1=['adam', 'LISA', 'barT']
L2=list(map(normalize,L1))
print(L2)

#3,filter()
#输入函数和字符串,函数依次作用于字符串的每个元素,根据返回值true/false决定保留或者丢弃
def is_odd(n):
    return n%2 == 1
print(list(filter(is_odd,[1,2,3,4,5,6,7])))
#删除序列中的空字符串
#strip的用法
s=['Facebook;Google+;MySpace', 'Apple;Android']
s1=[ele.strip(' ').split(';') for ele in s]
print(s1)
#s=['A', '', 'B', None, 'C', '  ']
#s2=[ele.strip() for ele in s]
#print(s1)
def un_blank(s):
    return s and s.strip()
print(list(filter(un_blank,['A', '', 'B', None, 'C', '  '])))
#用filter求素数
def _init():
    n=1
    while True:
        n=n+2
        yield n
def not_dividible(n):
    return lambda x :x%n>0
#lamda用法:能够嵌入到其他表达式中的隐藏函数
#   在表达式中重新定义一个函数,不需要把定义和表达式分开
#   限制,只能由一条表达式去组成
def prime():
    n=2
    it=_init()
    while True:
        n=next(it)
        yield n
        it=filter(not_dividible(n),it)
for n in prime():
    if n<600:
        print(n)
    else:
        break
#filter也是惰性计算,这里n表示的是全体素数

#practice,用filter过滤掉非回数
'''def _init():
    n=1
    while True:
        n=n+1
        yield n
def back(n):
    n=str(n)
    m=n[-1::-1]
    return lambda n :n==m
def prime():
    yield 1
    it=_init()
    while True:
        n=next(it)
        yield n
        it=filter(back(n),it)
for n in prime():
    if n < 500:
        print(n)
    else:
        break
还是不清楚在哪里出错了
'''

def back(n):
    n=str(n)
    m=n[-1::-1]
 #   return lambda n :n==m    
    if m==n:
        return True
    else:
        return False

print(list(filter(back,range(12580,13580))))



#4,sort排序算法
#按照绝对值大小排队
print(sorted([36,5,-12,5,-21],key=abs))
#按照字符串长度排序
print(sorted(['gakki','umr','toda','emma'],key=str.lower))
#按照字符串长度反向排序
print(sorted(['gakki','umr','toda','emma'],key=str.lower,reverse=True))








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值