Python map/reduce/filter 函数

map函数

map()函数是Python中的一个内置函数,它的功能是:将指定的函数,依次作用于可迭代对象的每个元素,并返回一个迭代器对象。这个可迭代对象,可以是一个也可以是多个。

map() 语法

map(function,iterable,...)

参数

function-我们指定的函数(或数据类型),可以是python内置的,也可以是自定义的。

iterable-可迭代的对象,例如列表,元组,字符串等。

返回值

返回一个可迭代对象,一般搭配list()使用,输出列表

def double(x):
    return 2 * x


numbers = [1, 2, 3, 4, 5]
# 将 函数 double 依次作用于 numbers 列表的每个元素,
doubled_numbers = map(double, numbers) 
print(doubled_numbers)      #   返回迭代器 <map object at 0x00000196BC127670>
print(list(doubled_numbers))    #   返回迭代器,搭配list输出  [2, 4, 6, 8, 10]

--------------------------------
list1 = [2, 4, 6, 8, 10]


def double(x):
    return x ** 2


# 将 函数double 分别作用于 list1, duble 是函数名
double_num = map(double, list1)     
print(double_num)   # <map object at 0x0000020393910070>
print(list(double_num))     # [4, 16, 36, 64, 100]

for i in map(double, list1):  # 遍历 迭代器
    print(i, end=' ')    # 4 16 36 64 100 

-------------------------------------
# 两个列表按对应下标进行相加
list1 = [1, 3, 5, 7]
list2 = [2, 4, 6, 8]


# 定义函数,因为要传入的两个可迭代对象进行运算,所以必须两个形参
def add_num(x, y):
    return x + y


# 函数map()对 list1 和 list2 进行计算
list3 = list(map(add_num, list1, list2))
print(list3)  # [3, 7, 11, 15]
reduce函数

reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中。先要使用 import functools 导入。

功能:

reduce函数先从列表(或序列)中取出2个元素执行指定函数,并将输出结果与第3个元素传入函数,输出结果再与第4个元素传入函数,…,以此类推,直到列表每个元素都取完。

语法:

reduce(fn函数,list)
reduce(func,lst)
# 其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累计计真

reduce() 函数从左至右依次累计使用列表中的元素调用 fn 函数,从而将列表累积生成单个值

# 需求: 使用for循环计算列表的累加值
list1 = [1, 2, 3, 4]
x = 0
for i in list1:
    x = x + i

print(x)  # 10
————————————————————————————————————————————
# 使用reduce()函数完成累加
list1 = [1, 2, 3, 4]
from functools import reduce  # 调入模快


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


# reduce() 函数从左至右依次累计使用列表中的元素调用 sum 函数,从而将列表累+生成单个值。
total = reduce(sum, list1)
print(total)    # 10
_____________________________________________
list1 = [1, 2, 3, 4]
from functools import reduce  # 调入模快


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


# reduce() 函数从左至右依次累计使用列表中的元素调用 sum 函数,从而将列表累积生成单个值。
total = reduce(sum, list1)
print(total)    # 24
---------------------------------------
# 调用reduce函数的另一个方法:
list1 = [1, 2, 3, 4]
def fun1(a, b):
    return a + b

import functools    # 导入 functools
result = functools.reduce(fun1, list1)  # 调用 reduce 函数
print(result)   # 10

# 使用 lambda 函数
result2 = functools.reduce(lambda x, y: x + y, list1)

print(result2)    # 10
filter()函数

filter() 属于Python中的内置函数,用于过滤序列,过滤掉不符合条件的元素。传入一个可迭代对象并返回一个新的迭代器对象,如果要转换为列表,可以使用list()来转换。

语法:

filter(function,iterable)

function -- 判断作用的函数

iterable -- 可迭代对象

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ]


def func(x):  # 定义函数作用,取偶数
    return x % 2 == 0


# 函数取偶数,分别作用于可迭代数据(list1), 过滤掉不满足的。
result = filter(func, list1)
# <filter object at 0x0000020B06BC5970> 内存地址,可迭代器
print(result)
print(list(result))     # [0, 2, 4, 6, 8] list转化为列表 

# 使用 filter + lambda 函数取 奇数
result2 = filter(lambda x: x % 2 == 1, list1)
print(list(result2))    # [1, 3, 5, 7, 9]

总结:

map() 分别将函数作用到列表对像的每个值,返回迭代器,列表list输出结果

reduce() 将列表中每个对像,累计到函数(必须两个形参)结果中,返回最终一个值。先要导入import functools

filter() 分别将判断作用的函数作用到列表对像的每个值,过滤掉不符合判断的数据,返回迭代器,列表list输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值