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]
领取专属 10元无门槛券
私享最新 技术干货