函数补充,高阶函数

Python的基础知识基本快介绍完了,这里再补充下函数的一些知识。后续主要会介绍正则、爬虫,数据分析、还有一些Python进阶。

1、map()和reduce()

含义解释:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。(摘自百度百科)

1.1 map()

map(参数1,参数2):

参数1:函数;参数2:序列

将传入的函数依次作用在序列中的每一个元素,并把结果作为新的Iterator返回

示例:

我们先写一个求平方的函数:

deffun(num):

returnnum * num

现在我们要利用这个函数,求1-10的平方。

用一个for循环可以很快的求出结果:

deffun(num):

returnnum * num

list = []

forxinrange(1,11):

list.append(fun(x))

print(list)

输出:

>>>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

现在我们用map()来实现:

deffun(num):

returnnum * num

list1 =map(fun,range(1,11))

print(list(list1))

输出:

>>>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

1.2 reduce()

reduce(参数1,参数2):

参数1:函数;参数2:序列

把一个函数作用在一个序列上,但是这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素累计运算。

示例:

我们先写一个求和函数:

deffun(num1,num2):

returnnum1 + num2

我们要利用这个函数,求1-10的和

用一个for循环可以很快的求出结果:

deffun(num1,num2):

returnnum1 + num2

sum =

forxinrange(1,11):

sum = fun(sum,x)

print(sum)

输出:

现在我们用reduce()来实现

fromfunctoolsimportreduce

deffun(num1,num2):

returnnum1 + num2

sum = reduce(fun,range(1,11))

print(sum)

输出:

1.3 综合应用

有一个字符串"123456789",求这个字符串对应的每个元素相加后的和。

解法思维:按照以往的做法,我们需要对字符串进行处理,先把每个字符串转成数字,然后进行相加:

str ="123456789"

sum =

index =

whileindex

sum +=int(str[index])

index +=1

print(sum)

输出:

现在使用mapreduce来实现:

fromfunctoolsimportreduce

defstrToNum(str):#定义一个字符串转数字的函数

returnint(str)

defadd(x,y):#定义一个求和函数

returnx+y

defstrAdd(str):

defstrToNum(str):

returnint(str)

defadd(x,y):

returnx+y

returnreduce(add,list(map(strToNum,str)))

print(strAdd("123456789"))

输出:

2、filter()

filter(参数1,参数2):

参数1:函数;参数2:序列

将传入的函数依次作用在序列中的每一个元素,根据返回值是True还是False决定是否保留该元素。

示例:

有一个列表[1,2,3,4,5,6,7,8,9],要求:只保留奇数,偶数剔除。

我们利用之前介绍的列表处理方法和循环函数可以很快求出结果:

list1= [1,2,3,4,5,6,7,8,9]

index =

whileindex

whilelist1[index] %2==:

list1.pop(index)

index +=1

print(list1)

输出:

>>>[1, 3, 5, 7, 9]

现在我们使用filter()来实现:

deffun(num):

ifnum %2!=:

return True

list1= [1,2,3,4,5,6,7,8,9]

print(list(filter(fun,list1)))

输出:

>>>[1, 3, 5, 7, 9]

3、sorted()

之前在介绍列表的时候,有介绍过列表的排序:

list = [5,-6,1,2,-3,4]

list.reverse()#反向排序

print(list)

list.sort()#排序,升序

print(list)

输出:

>>>[4, -3, 2, 1, -6, 5]

>>>[-6, -3, 1, 2, 4, 5]

Python有个sorted()函数也可以对list进行排序,而且功能更加强大。

示例1:普通排序

list = [5,-6,1,2,-3,4]

#普通排序

print(sorted(list))#默认升序排序

print(sorted(list,reverse=True))#降序排序

输出:

>>>[-6, -3, 1, 2, 4, 5]

>>>[5, 4, 2, 1, -3, -6]

示例2:函数作用后排序

list = [5,-6,1,2,-3,4]

deffun(num):#自定义求平方函数

returnnum * num

print(sorted(list,key=fun))#按平方大小排序

print(sorted(list,key=abs))#按绝对值大小排序

输出:

>>>[1, 2, -3, 4, 5, -6]

>>>[1, 2, -3, 4, 5, -6]

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181015G0AZ0F00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券