• (转)Python函数式编程——map()、reduce()


    转自:http://www.jianshu.com/p/7fe3408e6048

    1、map(func,seq1[,seq2...]) Python 函数式编程中的map()函数是将func作用于seq中的每一个元素,并用一个列表给出返回值。如果func为None,作用通zip().
    当seq只有一个时,将func函数作用于这个seq的每一个元素上,得到一个新的seq。

    举个例子来说明,(假设我们想要得到一个列表中数字%3的余数,那么可以写成下面的代码):

    >>> print map(lambda x:x%3, range(6))
    >>> [0,1,2,0,1,2]
    >>> print [x%3 for x in range(6)]
    >>> [0,1,2,0,1,2]

    当seq多于一个时,map都可以并行地对每个seq执行如下图所示的过程:

    下面的例子是求两个列表对应元素的积,可以想象,这是一种可能会经常出现的状况,而如果不是用map的话,就要使用一个for循环,依次对每个位置执行该函数。

    >>> print map(lambda x,y:x*y,[1,2,3],[4,5,6])
    >>> [4,10,18]
    #下面的代码不止实现了乘法,也实现了加法,并把积与和放在一个元组中。
    >>> print map(lambda x,y:(x*y,x+y),[1,2,3],[4,5,6])
    >>> [(4,5),(10,7),(18,9)]
    #当func是None的时候,目的是将多个列表相同的位置的元素归并到一个元组,在现在已经有了专用的函数zip()
    >>> print map(None,[1,2,3],[4,5,6])
    >>> [(1,4),(2,5),(3,6)]
    >>> print zip([1,2,3],[4,5,6])
    # 需要注意的是,不同长度的seq是无法执行map函数的,会出现类型错误

    2、reduce( func, seq[, init] ) Python
    reduce函数即为化简,它是这样一个过程:每次迭代,将上一次的迭代结果(第一次时为init的元素,如没有init则为seq的第一个元素)与下一个元素一同执行一个二元的func函数。在reduce函数中,init是可选的,如果使用,则作为第一次迭代的第一个元素使用。
    简单来说,一个形象化的例子:

    >>> reduce(func,[1,2,3]) = func(func(1,2),3)

    举个例子来说,阶乘是一个常见的数学方法,Python中并没有给出一个阶乘的内建函数,我们可以使用reduce实现一个阶乘的代码:

    >>> n=5
    >>> print reduce(lambda x,y:x*y,range(1,n+1))
    >>> 120
    #如果想要得到2倍的阶乘的值,那么就可以用到init这个可选参数了
    m=2
    n=5
    print 
    reduce(lambda x,y:x*y,range(1,n+1),m)
  • 相关阅读:
    四、java IO--使用字节流拷贝文件
    三、java IO--使用字节流写入文件
    二、java IO--使用字节流读取文件
    一、java--IO概念
    xml解析/读取--dom4j
    java程序执行顺序
    Flask学习——cookie操作
    Linux13 shell函数、数组及awk、awk中的数组
    Linux12 RPM 和yum的使用
    Linux11 IP网段划分及主机接入网络
  • 原文地址:https://www.cnblogs.com/liyinggang/p/6207386.html
Copyright © 2020-2023  润新知