【Python基础】11、内置高阶函数map、reduce、filter、sort、sorted

目录

 

一、高阶函数

二、内置的高阶函数

1、map()

用法:

2、reduce()

定义:

使用:

3、filter()  过滤函数

4、sort 和sorted

  使用方法:           sorted(iterable, key=None, reverse=False)  

   返回值

例1:对s = ['fdsf','Ffsdf','dsa','ERW']按照首字母顺序进行排序

例2:输入若干个商品信息,由商品名,商品数量,价格组成,然后分别按照各个项目进行排序

三、练习

1、将一个字符串转换成整型--还不会

 


一、高阶函数

即----将一个函数作为另一个函数的参数

def plus(a):                #定义自加一的函数
    a=a+1
    return a

def fun (x,y,plus):
    return plus(x),plus(y)   #定义一个函数,将参数,赋值给plus函数
print(fun(100,0,plus))

二、内置的高阶函数

1、map()

用法:

  • 接受两个参数,一个是函数,一个是序列
  • map将传入的函数以此作用于该序列的每个元素,并且把结果作为新序列后返回

例1:对一个列表的数据,求阶乘,输出列表里每个数据的阶乘

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

a=[random.randint(1,10) for i in range(0,6)]
print(set(map(f,a)))    #以列表形式输出

例2:对一个列表的每一项求绝对值

print(list(map(abs,[1,32,-3,-42])))

2、reduce()

定义:

  • 把一个函数作用在一个序列上,这个函数必须接收两个参数
  • reduce把结果继续和序列的下一个元素做累积计算,就这样一直循环下去

使用:

python2:reduce是内置函数,可以直接用
python3:from functools import reduce
   进行调用

例子:reduce(f,[x1,x2,x3,x4])   理解起来,就是这个过程:

                    f(f(x1,x2),x3),x4)  

例1:用内置reduce计算一个列表中元素的和

from functools import reduce   #调用该模块
   
a=[1,2,3,4,5,6] 

def plus(x,y):
    return x+y

print(reduce(plus,a))    #使用reduce

3、filter()  过滤函数

说明:

  • 和map()类似的,也接收一个函数和一个序列
  • 但是和map()不同的是,filter()把传入的函数依次作用于,每个元素
  • 然后根据返回值是True或者False决定保留还是丢弃该元素

注意类似于map(),只是加了一道选择判断功能

例1:输出20以内的偶数

def isodd(num):      #判断偶数
    if num % 2 ==0:
        return True
    else:
        return False
print(list(filter(isodd,range(20))))   #输出19以内的偶数

输出:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

4、sort 和sorted

     sort:是list的内置函数,是对原本列表进行排序,返回原列表

     sorted:是全局函数,不会对原数据作出改变,会产生一个新的列表(集合,字典......)

  使用方法:
           sorted(iterable, key=None, reverse=False)  

参数说明:

  • iterable -- 可迭代对象。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

   返回值

      返回重新排序的可迭代对象

例1:对s = ['fdsf','Ffsdf','dsa','ERW']按照首字母顺序进行排序

# list2 = [6,-8,-9,-1,3,4,5,6,8,9]
# list2.sort()
# print(list2)
# list3 = sorted(list2,key=abs)
# print(list3)
#
# s = ['fdsf','Ffsdf','dsa','ERW']
# print(s)
# print(sorted(s))
# print(sorted(s,key=str.lower))
# print(sorted(s,key=str.upper))

 

例2:输入若干个商品信息,由商品名,商品数量,价格组成,然后分别按照各个项目进行排序

info = [
    # 商品名称,商品数量,商品价格
    ('apple1',200,32),
    ('apple2', 40, 12),
    ('apple3', 1000, 23),
    ('apple1', 40, 2),
    ('apple1', 40, 5),

]

                        # 按照商品数量进行排序
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))


输出:

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

三、练习

1、将一个字符串转换成整型--还不会

'332.31321'
'0':0
'1':1
...

from functools import reduce

def str2int(s):
    def char2int(ch):
        c = {str(x):x for x in range(10)}
        #print(c)
        return c[ch]
    def fun(n1,n2):
        return n1 * 10 + n2
    return reduce(fun,map(char2int,s))

num = str2int('12343')
print(type(num),num)

2、利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字

3、利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456

4、回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值