阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Python 高阶函数

210次阅读
没有评论

共计 1877 个字符,预计需要花费 5 分钟才能阅读完成。

一、map&reduce

  • 概述

    Python 内建了 map() 和 reduce() 函数

  • map() 函数

    原型:map(fn, lsd)

    参数:

    ​fn:是一个函数

    ​lsd:集合

    功能:将传输的函数 fn 依次作用到 lsd 集合中的每个元素,并把结果作为一个 Iterator 返回

    myList = [1,2,3,4,5]
    def my_func(arg):
    return arg**2
    res = map(my_func,myList)
    print(list(res))
    print(tuple(res))
    print(set(res))
    # 使用 lambda 表达式来实现
    res = map(lambda x:x**2,myList)
    print(list(res))
    # 使用内置数据类型转换函数实现
    res = map(int,['1','2','3','4','5'])
    res = map(bool,[0,'1','2','3','','4',(),{},'5'])
    print(list(res))
  • reduce() 函数

    原型:reduce(fn, lsd)

    参数:
    fn:一个函数
    lsd:集合

    功能:传入的 fn 函数作用在 lsd 集合中,这个 fn 函数必须接收两个参数,reduce 把结果继续和序列中的下一个元素做累积运算

    from functools import reduce
    # 进行值的累加
    def add(x,y):
    print(x,y)
    return x+y
    """
    1 2
    3 3
    6 4
    10 5
    15
    """
    my_list = [1,2,3,4,5]
    # res = reduce(add,my_list)
    # 使用 lambda 表达式实现
    res = reduce(lambda x,y:x+y,my_list)
    print(res)
  • reduce&map 组合使用案例

    from functools import reduce
    # 将字符串的 '12345' 变成整形的 12345
    print(reduce(lambda x,y:x*10+y,list(map(lambda x:int(x),list('12345')))))
    """
    12345
    1+2 1*10+2
    3+3 12*10+3
    6+4 123*10+4
    10+5 1234*10+5 12345
    """

二、filter

原型:filter(fn, lsd)

参数:
fn:函数
lsd:集合
功能:用于过滤列表,把传入的 fn 函数依次作用在 lsd 集合中的每个元素上,然后根据返回 True 还是 False 决定是否保留该元素

li = [1,2,3,4,5,6,7,8,9,10]
# def func1(arr):
# for x in arr:
# if x % 2 == 0:
# arr.remove(x)
# func1(li)
def func2(num):
if num % 2 == 0:
return False
return True
res = filter(func2, li)
print(res)
print(list(res))
print(li)

删除列表中是空字符串的元素

li2 = ["a", "", "", "c", "", " bsg "]
def f(item):
return item and item.strip()
res = filter(f, li2)
print(list(res))

三、sorted

  • 排序算法

    冒泡排序、快速排序、选择排序,计数器排序等

  • 效率

    在数据量小时冒泡和快速没有什么区别,但是当处理大量数据时快速排序的效率明显高于冒泡排序

  • 冒泡算法原理

    1 2 3 4 5 -> 5 4 3 2 1
    1 2 3 4 5 -> 2 1 3 4 5 -> 2 3 1 4 5 -> 2 3 4 1 5 -> 2 3 4 5 1
    0 1 1 2 2 3 3 4
    2 3 4 5 1 -> 3 2 4 5 1 -> 3 4 2 5 1 -> 3 4 5 2 1
    3 4 5 2 1 -> 4 3 5 2 1 -> 4 5 3 2 1
    4 5 3 2 1 -> 5 4 3 2 1
    li = [1,2,3,4,5]
    for i in range(len(li) - 1):
    for j in range(len(li) - i - 1):
    if li[j] < li[j+1]:
    temp = li[j]
    li[j] = li[j+1]
    li[j+1] = temp
    print(li)
  • sorted() 函数

    原型:sorted(lsd, key=func)

    参数:
    lsd:集合
    key:规定排序的规则
    功能:将 led 中的每个元素作用在 key 函数上,用函数的结果的大小来排序
    优点:可以自定义排序规则

    def func(x):
    return ord(x[2])
    li2 = ["awaefweg","sgeweg3","sgwrtwe","wr2","ergstrhrt"]
    # li3 = sorted(li2, key=len, reverse=True)
    li3 = sorted(li2, key=func, reverse=True)
    print(li2)
    print(li3)

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计1877字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中