zoukankan      html  css  js  c++  java
  • python的map和reduce函数

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

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

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

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

    # 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. 两个输入参数

    # 2. 两个参数
    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等类型函数

    # 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表达式

    # 5. 使用lambda函数,x为参数,x**2属于lambda表达式的返回值
    a6 = map(lambda x: x ** 2, [1, 2, 3])
    print(a6)
    print(list(a6))  # 输出:[1, 4, 9]

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

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

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

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

    1. "减少"为一个值

    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函数也与此类似。

    参考:

    https://baijiahao.baidu.com/s?id=1594702528079035916&wfr=spider&for=pc

    https://blog.csdn.net/wxjsjp/article/details/80638696

    https://www.runoob.com/python/python-func-map.html

    https://www.runoob.com/python/python-func-reduce.html

    https://blog.csdn.net/ctan006/article/details/79657678

  • 相关阅读:
    continue用法
    break用法
    VLAN的划分
    子网掩码的计算
    简述RIP路由协议和OSPF路由协议的相同点和不同点。
    工程监理的内容是什么?
    工程监理的意义和职责是什么?
    双绞线测试的参数主要有哪些?
    光纤熔接损耗原因?
    综合布线系统的设计等级有哪几种?各有什么特点?
  • 原文地址:https://www.cnblogs.com/qi-yuan-008/p/12075220.html
Copyright © 2011-2022 走看看