python——高阶函数——map reduce filter sorted

时间:2022-04-24 19:50:04

map

def double(a):
return 2 * a

def upper(str):
return str.upper()

print map(double, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print map(upper, 'martin')
output:
[2, 4, 6, 8, 10, 12, 14, 16, 18]
['M', 'A', 'R', 'T', 'I', 'N']
总结:
  • map第一个参数为函数(1个参数),第二个参数为list
  • map功能把函数作用于list每个元素,返回新list

reduce

def add(a, b):
return a + b

def mul(a, b):
return a * b

print reduce(add, [1, 3 ,5 ,7, 9])
print reduce(mul, [1, 3 ,5 ,7, 9])
output:
25
945
总结:
  • reduct第一个参数为函数(2个参数),第二个参数为list
  • reduct功能使用函数作累积计算

filter

def odd(n):
return n % 2 == 1

def prime(n):
if n == 1:
return False
for i in range(2, n):
if n % i == 0:
return False
return True

print filter(odd, range(1, 21))
print filter(prime, range(1, 21))
output:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
[2, 3, 5, 7, 11, 13, 17, 19]
总结:
  • filter第一个参数为函数(1个参数,返回布尔值),第二个参数为list
  • fliter功能根据函数返回结果过滤元素

sorted

def asc(x, y):
if x > y:
return 1
if x < y:
return -1
return 0

def desc(x, y):
if x > y:
return -1
if x < y:
return 1
return 0

print sorted([8, 5, 58, 18, 15])
print sorted([8, 5, 58, 18, 15], asc)
print sorted([8, 5, 58, 18, 15], desc)
output:
[5, 8, 15, 18, 58]
[5, 8, 15, 18, 58]
[58, 18, 15, 8, 5]
总结:
  • sorted第一个参数为list,第二个参数为函数(2个参数,返回比较结果,通常规定1表示大于,-1表示小于,0表示等于)
  • sorted功能根据函数比较结果进行排序
注:如果第二个参数omit,直接把>或<或==运算符作用于list元素(如果list元素类型不支持>或<或==,则throw exception)