[python基础]map、reduce、lambda、filter四个基本函数的使用

it2026-04-23  4

map函数

map函数根据提供的函数对指定的序列(可迭代的)做映射

定义:map(function, sequence[,sequence,…])—>list

返回一个map类型可迭代对象

def create_content(mes): return map(lambda x: x+2, mes) def write_content_item(result): for i in result: print(i, end=" ") content = create_content([1, 2, 3]) # 返回一个map对象 print(type(content)) # map对象具有__iter__和__next__方法,属于可迭代对象 print(content.__next__()) write_content_item(content) content = create_content((1, 2, 3)) write_content_item(content) ''' map第二个参数开始必须输入的是可迭代对象 ''' try: content = create_content(1) write_content_item(content) except Exception as e: print("输入了非迭代对象") print("第二次实验------多输入参数") content = map(lambda x, y: x + y, {1, 2}, {3, 4}) for i in content: print(i) content = map(lambda x, y, z: x + y - z, {1, 2}, {3, 4}, {-1, 3}) for i in content: print(i)

由上可知:

输入的sequence[,sequence,…]必须是可迭代对象前面的function调用的参数数量需要与后面输入的迭代对象数目保持一致

filter函数

filter函数对指定的序列进行过滤操作

定义:filter(function or None, sequence) -> list, tuple, or string

print(list(filter(lambda x: 'a' <= x <= 'z', '132a')))

reduce函数

reduce函数会对参数序列中元素进行累积 (上次调用的结构会传递给下一次调用)

定义:reduce(function, sequence[, initial]) -> value

注:function必须是有2个参数的函数

from functools import reduce def get_all(content): return reduce(lambda x, y: 10*x + y, content) print(get_all([1, 2, 3, 4, 5]))

reduce(functiion(x,y),[p1, p2, p3, p4])<=>f(f(f(p1,p2),p3),p4)

lambda函数

在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便

# lambda构建匿名函数 f = lambda x, y: x + y print(f(1, 2))

用匿名函数有个好处:

因为函数没有名字,不必担心函数名冲。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数: >>> f = lambda x: x * x >>> f <function <lambda> at 0x101c6ef28> >>> f(5) 25 同样,也可以把匿名函数作为返回值返回 def build(x, y): return lambda: x * x + y * y

最后做个小案例吧

提取字符串中的整数

样例输入 123asdasdfgw123 样例输出 123123

from functools import reduce # 1、输入一个字符串 mes = input("请输入你要转化为整数的字符串>>") # 2、筛选出其中的数字字符 str_number = filter(lambda x: '0' <= x <= '9', mes) # 3、将数字字符串转化为数字迭代器 number_iterator = map(lambda x: int(x), list(str_number)) # 4、将数字迭代器转化为一个整数 number = reduce(lambda x, y: 10*x + y, list(number_iterator)) print(number)
最新回复(0)