Python入门之高阶函数与内置高阶函数(map、reduce、filter、sorted)

1 高阶函数

1.1 什么是高阶函数:

高阶函数指的是接受函数作为输入或输出的函数,即实参是一个函数名,函数的返回值是一个函数。Python中内置了几个常用的高阶函数,比如map( )函数、reduce( )函数、filter( )函数和sorted( )函数。
1.2 高阶函数的示例:

#传递的参数包括函数名
def fun(x,y,f):
    return f(x),f(y)

print(fun(-10,34,abs))

#函数本身也可以赋值给变量,变量也可以指向函数
 f = abs
 print(f(-10))

2 内置高阶函数

2.1 内置高阶函数map():

具体用法:map()接收两个参数,一个是函数,一个是序列
map将传入的函数依次作用到序列的每个元素,并把结果作为新的序列返回

(1)对于序列[-1,3,-5,-2]的每个元素求绝对值:

print(list(map(abs,[-1,3,-5,-2])))

(2)有10个2-7之间的随机数,对每个元素求阶乘

def jc(x):
     res = 1
     for i in range(1,x+1):
         res *= i
     return res

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

(3)字符串转化为列表

#'1 3 5 7 9'
s = '1 3 5 7 9'
print(list(map(int,s.split())))

2.2 内置高阶函数reduce():

具体用法:reduce:把一个函数作用在一个序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
reduce(f,[x1,x2,x3,x4,x5]) = f(f(f(x1,x2),x3),x4)
python2中:reduce是内置函数
python3中 from functools import reduce

(1)计算1-5的阶乘

from functools import reduce

def multi(x,y):
    return x*y

print(reduce(multi,range(1,5)))

(2)计算1-9的和

def add(x,y):
    return x+y
print(reduce(add,range(1,10)))

2.3 内置高阶函数filter():

具体用法:filter过滤函数接收一个函数一个序列,filter把传入的函数依次作用于每个元素,根据返回值是True还是False决定保留还是丢弃该元素
找出1-100之间的偶数

def isodd(num):
    if num % 2 == 0:
        return True
    else:
        return False

print(list(filter(isodd,range(1,101))))

2.4 内置高阶函数sorted():

具体用法:用来对可迭代对象排序的,与列表的sort函数不同,后者是在原位置上进行排序的,排序后原列表的元素顺序会发生改变,而前者是将排序后的结构生成到一个新的列表中。

 li = [2,1,4,3]
 li.sort(reverse=True)
 print(li)  ##默认sort和sorted由小到大排序,reverse=True由大到小排序
 a = sorted(li,reverse=True)
 print(a)

(1)sorted函数还可以指定序列按照给定的条件进行排序,格式:sorted(序列,key=条件)

info = [
    ('apple1',200,32),
    ('apple2',40,12),
    ('apple3',40,2),
    ('apple4',1000,23),
    ('apple5',40,5),
]

print(sorted(info))

#按照商品数量进行排序
def sorted_by_count(x):
    return x[1]

#按照商品价格排序
def sorted_by_price(x):
    return x[2]

#先按照商品数量由小到大排序,如果商品数量一眼
#则按照商品价格由小到大排序

def sorted_by_count_price(x):
    return x[1],x[2]

print(sorted(info,key=sorted_by_count))
print(sorted(info,key=sorted_by_price))
print(sorted(info,key=sorted_by_count_price))

(2)sorted函数练习

给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
# 输入:
    第一行是数组长度, 后续每一行是数组的一条记录;
    4
    0
    7
    0
    2
# 输出:
    调整后数组的内容;
    4
    7
    2
    0
    0
"""
a = ''.join(input().split())

li = [int(i) for i in a]

def f(x):
    if x == 0:
        return 1
    else:
        return 0

#[0,0,0,1,1] ————>[4,7,2,0,0]
#根据返回值0,1进行排序,0对应的是key4,7,2;1对应key0

print(sorted(li,key=f))
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值