python中的map,feilter,和reduce函数

python中的map,feilter,和reduce函数


map()

map()的原型是map(function, iterable, …)

  • 参数 function: 传的是一个函数名,可以是python内置的,也可以是自定义的。 就像上面的匿名函数lambda

  • 参数 iterable: 传的是一个可以迭代的对象,例如列表,元组,字符串这样的。

  • 返回值是一个map对象,其实质就是一个迭代器

这个函数的意思就是将function应用于iterable的每一个元素,结果以列表的形式返回(其实是迭代器)。注意到没有,iterable后面还有省略号,意思就是可以传很多个iterable,如果有额外的iterable参数,并行的从这些参数中取元素,并调用function。如果一个iterable参数比另外的iterable参数要短,将长iterable剩下的元素扔掉。

例子:将列表中的int型元素转换成字符串型


a=[1,2,3,4,5]

la=map(str,a)

print(la)
print(list(la)) #使用list方法将迭代器转化成列表

输出:

<map object at 0x000002C09F758278>
['1', '2', '3', '4', '5']

例子:将两个等长列表合并

"""
如果两个列表不等长,map会以最短的列表为准,将长列表剩下的元素扔掉,如果想以长列表为准的话
"""
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]

res = map(lambda x, y: x + y, a, b)

print(list(res))

输出:
    
[2, 4, 6, 8, 10]


如果两个列表不等长,map会以最短的列表为准,将长列表剩下的元素扔掉,
如果不想丢弃长列表剩下的元素,想以长列表为准的话,请点击以下链接

https://blog.csdn.net/weixin_43250623/article/details/93409418


reduce()

reduce函数接收两个参数,一个是函数,一个是Iterable

把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

from functools import reduce
# 从某个版本开始reduce不再作为内置函数存在,而是放在了functools模块中


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


a = [1, 2, 3, 4, 5]

res = reduce(f1, a)
print(res)

输出:
#  15

如果要把序列[1, 3, 5, 7, 9]变换成整数13579reduce就可以派上用场:

def fn(x, y):
    return x * 10 + y


res = reduce(fn, [1, 3, 5, 7, 9])
print(res)

输出:
#  13579

filter()

filter函数用于过滤序列

filter()函数包含2个参数,一个是过滤函数,另一个是过滤序列

返回值是一个可迭代对象

filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

下面用一个例子:

删除1-100中素数

L = range(1, 101)


def isprimer(n):
    flag = 1
    for i in range(2, n):
        if n % i == 0:
            flag = 0
    if flag == 0:
        return n


res = filter(isprimer, L)

print(res)  # 输出来是一个filter对象,其实质是一个迭代器
print(list(res))

输出:

<filter object at 0x0000020B7AC583C8>

[4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100]

更详细讲解移步https://www.liaoxuefeng.com/wiki/1016959663602400

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值