标签:map 函数 迭代 Python reduce list 谈谈 sorted 高阶
谈谈Python中那些高阶函数
前言
在编程语言中,高阶函数指的是接受函数作为输入或输出的函数。简而言之就是将一个函数作为参数传到另一个函数A中,那么这个函数A就是高阶函数。(可接收其他函数作为参数的函数称为高阶函数)
一、map()函数
python中的map()函数是一个内置的高阶函数,一般用法是map(function, iterable)。需要传入一个函数,这个函数可以是内置的,也可以是自己定义,也可以是匿名函数即lambda。第二个参数是一个可迭代对象,如列表、字典字符串等。map函数返回的是一个map对象,也是一个可迭代对象,可以利用for循环迭代查看元素,也可以尝试 list() 将其转为列表对象操作、map形式:
map(function, iterable, …)
例:
def add(x):
return x+x
print(map(add,[1,2,3]))
print(list(map(add,[1,2,3])))
输出结果:
二、reduce()函数
reduce用于对可迭代对象中的元素进行累积操作,reduce接受两个参数,一个是函数f(x, y) 参数(该函数必须有两个参数),另一个是可迭代对象。reduce行为是先将可迭代对象的前两个元素传入 f(x, y) 中,然后不断将 f(x, y) 的返回值再次和下一个迭代对象传入f(x, y),直到迭代完迭代对象中的元素,并返回最终的 f(x, y) 的返回值。reduce形式:
reduce(function, iterable[, initializer])
例:
from functools import reduce
def prod(x,y):
return x*y
print(reduce(prod,[2,4,5,7,12]))
print(reduce(prod,[2,4,5,7,12],100))
输出结果:
三、filter()函数
filter用于过滤筛选可迭代对象中的元素,如果符合条件则返回对应的元素序列(类型为filter),filter接受两个参数,一个是函数用于筛选元素,返回值为True或Flase,另一个是可迭代对象。
例:
import math
def is_sqr(x):
return math.sqrt(x)==int(math.sqrt(x))
print(list(filter(is_sqr,range(1,101))))
输出结果:
四、sorted()函数
对所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sorted(iterable,key=None,reverse=False)
iterable – 可迭代对象。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回重新排序的列表:
print(sorted([5,2,3,1,4]))
#[1, 2, 3, 4, 5]
print(sorted({1:'D',2:'B',3:'b',4:'E',5:'A'}))
#[1, 2, 3, 4, 5]
利用key进行倒序排序:
example_list=[1,4,7,2,8,5,6,7]
result_list=sorted(example_list,key=lambda x:x*-1)
print(result_list)
#输出结果 [8, 7, 7, 6, 5, 4, 2, 1]
要进行反向排序,也可以通过传入第三个参数 reverse=True:
example_list=[1,4,7,2,8,5,6,7]
print(sorted(example_list,reverse=True))
#输出结果 [8, 7, 7, 6, 5, 4, 2, 1]
标签:map,函数,迭代,Python,reduce,list,谈谈,sorted,高阶 来源: https://blog.csdn.net/weixin_54787921/article/details/115326256
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。