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

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)

由上可知:

  1. 输入的sequence[,sequence,…]必须是可迭代对象
  2. 前面的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))

用匿名函数有个好处:

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

猜你喜欢

转载自blog.csdn.net/hide_in_darkness/article/details/109227183