Python-内置高阶函数总结

map()

  1. 接收两个参数,一个是函数 一个是序列
  2. map()将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回
import random
# 对一个序列[-1,3,-4,-5]的每一个元素求绝对值
print(list(map(abs,[-1,3,-4,-5])))
# 对每个元素求阶乘
def f(x):
    """对x求阶乘"""
    res = 1
    for i in range(1,x+1):
        res = res * i
    return res

li = [random.randint(2,7) for i in range(10)]
print(li)
print(list(map(f,li)))

结果:
[1, 3, 4, 5]
[3, 5, 7, 4, 5, 3, 4, 7, 5, 4]
[6, 120, 5040, 24, 120, 6, 24, 5040, 120, 24]

reduce()

  1. 接收两个参数,一个是函数 一个是序列
  2. 把一个函数作用在一个序列上,这个函数必须接收序列两个参数
  3. reduce把结果继续和序列的下一个元素做累积计算
    reduce(f,[x1,x2,x3,x4]) =f(f(f(x1,x2),x3),x4)
  4. 另:python2中:reduce是内置函数;python3中式模块functools中的函数
from functools import reduce
#计算1-10的累计乘积
def multi(x,y):
    return x * y
print(reduce(multi,range(1,10)))

#计算1-100的累计加和
def add(x,y):
    return x+y
print(reduce(add,range(1,101)))

显示结果:
3628800
5050

filter()

  1. filter()是个过滤函数和map()类似的,也接收一个函数和一个序列
  2. 但是和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True或者False决定保留还是丢弃该元素
#10以内的偶数
def isodd(num):
    if num % 2 == 0:
        return True
    else:
        return False
print(list(filter(isodd,range(11))))
显示结果:
[0, 2, 4, 6, 8, 10]

sorted()

  1. sorted()对输入的序列进行排序
  2. 不改变原来的列表内容,生成一个新的列表
list = [6,7,8,9,1,2,34]
list2 = sorted(list)
print(list)
#[6, 7, 8, 9, 1, 2, 34]
print(list2)
#[1, 2, 6, 7, 8, 9, 34]

list2 = [6,8,-8,-4,2,3,4,7,8]
list2.sort()
print(list2)
#[-8, -4, 2, 3, 4, 6, 7, 8, 8]
list3 = sorted(list2,key=abs)	#abs绝对值
print(list3)
#[2, 3, -4, 4, 6, 7, -8, 8, 8]

s = ['da','Ffsf','FSF','das']
print(s)
#['da', 'Ffsf', 'FSF', 'das']
print(sorted(s))
#['FSF', 'Ffsf', 'da', 'das']
print(sorted(s,key=str.lower))
#['da', 'das', 'Ffsf', 'FSF']
print(sorted(s,key=str.upper))
#['da', 'das', 'Ffsf', 'FSF']

匿名函数

  1. 匿名函数的关键字为 lambda;以冒号:分割代码,前面是形参冒号后面是返回值
  2. lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  3. lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
from functools import reduce
def add(x,y):
    return x+y
print(reduce(add,range(10)))
#45
print(reduce(lambda x,y:x+y,range(10)))
#45
def mypow(x):
    return x ** 2
print(list(map(lambda x:x**2,range(5))))
#[0, 1, 4, 9, 16]

def isood(num):
    return num % 2 == 0
print(list(filter(lambda x:x%2==0,range(10))))
#[0, 2, 4, 6, 8]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值