从两个例子看 Python【map、reduce、filter】内置函数的使用

原创
2014/04/25 12:07
阅读数 2.6K
AI总结

一 概念介绍

        本文从求质数,求阶乘两个示例, 提示Python的内置函数【map、reduce、filter】的使用方式

        详细参见:https://docs.python.org/2/library/functions.html

    Map函数: 对iterable中的item依次执行function(item),执行结果输出为list

map(function, iterable[, iterable, ...]) -> list

    Filter函数:对iterable中的item依次执行function(item),将执行结果为True(!=0)的item组成一个List/String/Tuple(取决于iterable的类型)返回,False则退出(0),进行过滤。

filter(function or None, iterable) -> list, tuple, or string    

       Reduce函数: iterable中的item顺序迭代调用function,函数必须要有2个参数。要是有第3个参数,则表示初始值,可以继续调用初始值,返回一个值

    定义大致如下:

def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        try:
            initializer = next(it)
        except StopIteration:
            raise TypeError('reduce() of empty sequence with no initial value')
    accum_value = initializer
    for x in it:
        accum_value = function(accum_value, x)
    return accum_value

二 示例代码

#!/usr/bin/python
# encoding=utf-8
# Filename: lambda.py
# 测试程序

# 质数的定义 只有1和它本身两个因数
def isPrime(start, stop): 
    # 取出质数,x从range(start,stop+1) 取的数
    return filter(lambda x : not [x % i for i in range(2, x) if x % i == 0], range(start, stop + 1))

# 实现5!+4!+3!+2!+1!
def addFactorial(n):
    result = []  
    for i in map(lambda x:x + 1, range(n)): 
        a = reduce(lambda x, y:x * y, map(lambda x:x + 1, range(i)))  
        result.append(a)  
    return reduce(lambda x, y:x + y, result)


def main():
    # 设置默认值
    start = 2
    stop = 0
    n=1
    try :
        start = input("Enter a start Number :")
        stop = input("Enter a stop  Number :")
        n = input("Enter a Number(int) : ")
    except :
        pass
    result = isPrime(start, stop)
    print(result)
    print addFactorial(n)
    
if __name__ == '__main__':
    main()
展开阅读全文
加载中
点击加入讨论🔥(1) 发布并加入讨论🔥
1 评论
35 收藏
2
分享
AI总结
返回顶部
顶部