栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[python]十七、高阶函数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[python]十七、高阶函数

目录

1、高阶函数定义

2、常用的高阶函数

2.1、常用高阶函数——map

2.1.1、map小练习

2.2、常用高阶函数——filter

2.3、常用高阶函数——sorted排序

2.3.1、sorted排序小练习

2.4、常用高阶函数——reduce


1、高阶函数定义

定义:把函数作为参数传入,这样的函数称为高阶函数

2、常用的高阶函数

2.1、常用高阶函数——map
  • 内置函数map,map()函数接收两个参数,一个是函数,一个是Iterable(可多个)
  • map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

# 求取列表中的每个元素的平方值
lst = [1, 2, 3, 4, 5]
lst2 = [3, 6, 7]


def func(item):
    return item * item


# 一个一个映射成我们想要的元素输出
result = map(func, lst)
print(list(result))
result = map(lambda x: x ** 2, lst)
print(list(result))

#注意短板效应:都是以最短的数作为标准来运算
print(list(map(lambda x,y:x+y,lst,lst2)))

# 执行结果:[4, 8, 10]

2.1.1、map小练习
  • 有列表[1,2,3,4,5],将所有元素转换成str:['1','2','3','4','5']
print(list(map(str,[1, 2, 3, 4, 5])))
  • 有列表字符串'span',将各字符转换成对应的ascii码的列表[115, 112, 97, 109]
print(list(map(ord,"span")))
  • 有列表[-1,-2,0,1,2],将各元素转换成绝对值[1, 2, 0, 1, 2]
print(list(map(abs,[-1, -2, 0, 1, 2])))
  • 将列表中的数变成百分位并且取两位小数
a = [0.346574, 3.1264,15.2165,0.2165]
print(list(map(lambda x:f"{round(x*100,2)}%",a)))
print(list(map(lambda x:"%.2f%%"% (x*100),a)))

2.2、常用高阶函数——filter

filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该

元素。注意到filter()函数返回的是一个Iterator,也就是一个惰性序列。

作用:用于过滤

  • 取出10以内的奇数
result = filter(lambda x:x %2,range(10))
print(list(result))

#### 执行结果
[1, 3, 5, 7, 9]
  • 1-200以内开平方是整数的数
import math
print(list(filter(lambda x: math.sqrt(x) % 1 == 0, range(1, 201))))


#### 执行结果
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]
  • 过滤出100-999以内的水仙花数
def func1(item):
    return item == ((item % 10) ** 3 + (item //10%10) ** 3 + (item // 100) ** 3)
print(list(filter(func1, range(100, 1000))))

##### 执行结果
[153, 370, 371, 407]
  • 把一个序列中的空字符串删除,['A', '', 'B', None, 'C', ' ', 'a', 1, 0]
lst = ['A', '', 'B', None, 'C', ' ', 'a', 1, 0]
print(list(filter(lambda x:x is not None and str(x).strip(),lst)))

### 执行结果
['A', 'B', 'C', 'a', 1, 0]

2.3、常用高阶函数——sorted排序
lst = [-6, 3, 2, -9, 7]
print(sorted(lst, key=abs))
lst2 = [True, len(lst)>2, 0, 2]


###### 执行结果
# 按照绝对值排序,按照函数的返回值来排序
[2, 3, -6, 7, -9]

# 在在底层布尔类型都是0和1。注意字符串类型,不能够进行排序
[0, True, True, 2]
lst = [(True, False, True),
       (2, 1, 4),
       (4, 23, 1),
       (False, True, 2),
       (False, False, 9)]

print(sorted(lst))

###### 执行结果
# 按照每一个元素(容器类型)的第一个元素进行排序。若是第一个的值一样,那么就按照第二个排序,以此类推
[(False, False, 9), (False, True, 2), (True, False, True), (2, 1, 4), (4, 23, 1)]

2.3.1、sorted排序小练习
1、列表中的值忽略大小写
lst = ['bob', 'about', 'Zoo', 'Credit']
print(sorted(lst,key=str.lower))

#### 执行结果
['about', 'bob', 'Credit', 'Zoo']


2、d1 = {"a":3,"b":2,"c":4,"d":1} value值来排序
d1 = {"a":3,"b":2,"c":4,"d":1}
# 下面中方法都可行
print(sorted(d1,key=lambda x:d1[x]))
print(dict(sorted(d1.items(),key=lambda x:x[1])))

#### 执行结果
['d', 'b', 'a', 'c']
{'d': 1, 'b': 2, 'a': 3, 'c': 4}

2.4、常用高阶函数——reduce

作用:reduce数组是用来迭代一个数组,并且把它累积到一个值中。使用reduce方法时,要传入一个回调函数,这个回调函数的参数是一个累加器(比如例子中的previousVal)和当前值(currentVal)。

from functools import reduce

a = [1, 2, 3, 4]


def func1(x, y):
    return x * 10 + y


print(reduce(func1, a))
# 前面得到的结果,变成下一个参数继续传入。
# 1*10+2=12  ==》12*10 +3=123 ==》123*10+4==1234

##### 执行结果
1234

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012111.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号