Python 内置函数 filter、map、reduce、lambda使用

Admin 2019-04-28 15:19:03 Python

filter(function, sequence)

lst = ['1', '2','3', '4']

def func(x): return x if x != '1' else None

ret = filter(func, lst)

print ret
# ['2', '3', '4']

对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回(过滤函数)。


map(function, sequence)

lst = ['1', '2','3', '3']

def func(x): return x + ".map"

ret = map(func, lst)

print ret
# ['1.map', '2.map', '3.map', '3.map']

对sequence中的item依次执行function(item),执行结果组成一个List返回,map也支持多个sequence,这就要求function也支持相应数量的参数输入:

def add(x, y): 
  return x+y

print map(add, range(10), range(10))

# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]


reduce(function, sequence, starting_value)

def add(x,y): 
  return x + y
  
print reduce(add, range(1, 100))
print reduce(add, range(1, 100), 10) # 加10

# 4950 (注:1+2+...+99)
# 4970 (注:1+2+...+99+20)

对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,如可以用来对List求和


lambda(匿名函数)

func = lambda x: x * 2

print func(2)
print (lambda x: x * 2) (2)

# 4

可以认为,lambda是一个表达式,定义了一个匿名函数,x为入口参数,x*2为函数体,用函数来表示为:

def func(x):
  return x * 2


函数组合使用

lst = [1,2,3]
print map(lambda x: x * 2, lst)
# [2, 4, 6]
print [x * 2 for x in lst] # 也可以这样写

print filter(lambda x: x % 2 == 0, lst)
# [2]
print [x for x in lst if x % 2 == 0] # 也可以这样写
相关文章
最新推荐