码迷,mamicode.com
首页 > 编程语言 > 详细

使用python实现内置map,filter,reduce函数

时间:2014-08-04 21:50:28      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:使用   ar   python   c   app   ef   return   函数   

map函数

# -*- coding: cp936 -*-
def myselfmap(f,*args):
    def urgymap(f,args):
        if args==[]:
            return []
        else:
            return [f(args[0])]+urgymap(f,args[1:])
    if list(args)[0]==[]:             #*args有多个参数被传递时返回tuple
        return []
    else:
        return [apply(f,urgymap(lambda x: x[0],list(args)))]+apply(myselfmap,[f]+urgymap(lambda x: x[1:],list(args)))

filter函数

def myselffilter(prediate,s):
    if(isinstance(s,list)):
        if(s==[]):
            return []
        elif(isinstance(s[0],list)):
            return [myselffilter(prediate,s[0])]+myselffilter(prediate,s[1:])
        elif(prediate(s[0])):
            return [s[0]]+myselffilter(prediate,s[1:])
        else:
            return myselffilter(prediate,s[1:])
    elif(isinstance(s,tuple)):
        if(s==()):
            return ()
        elif(isinstance(s[0],tuple)):
            return myselffilter(prediate,s[0])+myselffilter(prediate,s[1:])
        elif(prediate(s[0])):
            return s[0]+myselffilter(prediate,s[1:])
        else:
            return myselffilter(prediate,s[1:])
    else:
        if(s==""):
            return ""
        elif(prediate(s[0])):
            return s[0]+myselffilter(prediate,s[1:])
        else:
            return myselffilter(prediate,s[1:])

        
#######test##########################        
#>>> myselffilter(lambda x: x>2,(1,2,3,(4,5,6)))
#(3, (4, 5, 6))
#>>> myselffilter(lambda x: x>2,[1,2,3,[4,5,6]])
#[3, [4, 5, 6]]


reduce函数

def myselfreduce(fun,s,initial=0):
    if(s==[]):
        return initial
    if(s==()):
        return initial
    if(s==""):
        return initial
    return s[0]+myselfreduce(fun,s[1:],initial)

和内置的filter不一样,本来是可以改成一样的,但是我觉得python这种类型比较我挺不喜欢的,所以没去改:)

使用python实现内置map,filter,reduce函数,布布扣,bubuko.com

使用python实现内置map,filter,reduce函数

标签:使用   ar   python   c   app   ef   return   函数   

原文地址:http://my.oschina.net/firebroo/blog/297945

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!