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

Python 高阶函数

145次阅读
没有评论

共计 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、短信等云产品特惠热卖中