python的map和reduce函数

map

map函数时python的高级内置函数

语法为:map(function, iterable, ...)

参数:

  • function – 函数
  • iterable – 一个或多个序列

将function作用于iterable序列中的每一个元素,并将调用的结果返回
主要是为了并行运算,非常高效

1.一个输入参数,输入为列表

def map_func(x):
    res = x**2
    return res
a1 = map(map_func, [1,2,3]) 
#直接返回的是object,例如 <map object at 0x000001FEF3457438>
print(a1)
print(list(a1))   #强制转换:[1, 4, 9]

2.一个输入参数,输入为元组

a2 = map(map_func, (1,2,3))
print(a2)

3.两个输入参数

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def map_func_2(x,y):
    res = x+y
    return res
a3 = map(map_func_2, [1,2,3],[1,2,3]) 
#同时从两个序列中取出相同位置的元素,进行运算;但是两个参数不同长度时会报错
print(a3)
print(list(a3))  # 输出为:[2, 4, 6]

4.使用int等类型函数

a4 = map(int, [1.5,2.1,3.0]) 
#同时从两个序列中取出相同位置的元素,进行运算;但是两个参数不同长度时会报错
print(list(a4))  #输出:[1, 2, 3]

a5 = map(int, '12306')  #将字符串元素变成整数
print(list(a5))  #输出:[1, 2, 3, 0, 6]

5.使用lambda表达式

a6 = map(lambda x: x ** 2, [1, 2, 3])
print(a6)
print(list(a6))  # 输出:[1, 4, 9]

reduce

reduce函数,与map函数类似,注意在Python3中reduce不再是内置函数,而是集成到了functools中,需要:from functools import reduce

函数将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给 reduce中的函数 function(二元函数,两个参数),先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,依次进行下去直到最后。

用法:reduce(function, iterable[, initializer])

参数:

  • function – 函数,有两个参数
  • iterable – 可迭代对象
  • initializer – 可选,初始参数

1."减少"为一个值

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from functools import reduce
def add_2(x, y):
    return x+y
a7 = reduce(add_2, [1,2,3])  
#得到的是一个值,依次执行add_2(1,2),对结果和3执行add_2(add_2(1,2),3),有点类似递归运算
print(a7)  #输出为:6

2.lambda表达式调用

# lambda函数使用, x,y为参数,x+y为lambda表达式的返回值
a8 = reduce(lambda x, y: x+y, [1,2,3])  
#得到的是一个值,先调用参数1,2,然后对结果和3继续使用
print(a8) #输出为:6

3.减少矩阵维度

import numpy as np
tmp = np.mat([[1,2,3],[4,5,6],[7,8,9]])
print(tmp)
#    输出为:
#    [[1 2 3]
#     [4 5 6]
#     [7 8 9]]
a9 = reduce(lambda x,y: x+y, tmp)  #实际是:首先[1,2,3]+[4,5,6] = [5,7,9];然后[5,7,9] + [7,8,9] = [12,15,18]
print(a9)  # 输出:[[12 15 18]],是(1,3)的矩阵

其中,还有filter函数也与此类似。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值