• 哪段儿代码更优雅,可读性更高,更Pythonic?


    Huhao.me

    哪段儿代码更优雅,可读性更高,更Pythonic?

    题目要求

    找出一个锯齿数组里长度大于5的子数组

    在符合要求的子数组里的数据里找出所有偶数

    如果数据小于10的话乘以2,大于10的除以2

    最后统计符合要求的数据的和

    测试数据

    inputdata = [
           [2,8,9,13,72,67,88,35,44],
           [33,28,47,2,10,45,66,92],
           [22,34,60,43,0,72,52],
           [10,11,53,58]
            ]
    
    print sum1(inputdata)
    

    @蛙蛙王子 python

    https://github.com/onlytiancai/codesnip/blob/master/python/goodorbad.py

    def sum1(input):
        return sum((lambda x: x < 10 and x*2 or x/2)(num)
                for seq in inputdata
                if len(seq) >= 5
                for num in seq
                if num % 2 == 0)
    
    def sum2(input):
        def getsublist():
            for sublist in input:
                if len(sublist) >= 5:
                    yield sublist
        def filterdata(sublist):
            for data in sublist:
                if data % 2 == 0:
                    yield data
        def processdata(data):
            if data < 10:
                return data * 2
            return data / 2
        result = 0
        for sublist in getsublist():
            for data in filterdata(sublist):
                result += processdata(data)
        return result
    
    def sum3(input):
        return sum(num*2 if num < 10 else num/2
                for seq in inputdata
                if len(seq) >= 5
                for num in seq
                if num % 2 == 0)
    

    @pw_网易有道 python

    https://gist.github.com/1891339

    def sum4(input):
        '''
        '''
        def filterList(matrix):
            return filter(lambda x: len(x) >= 5, matrix)
    
        def filterData(list):
            return filter(lambda x: x % 2 is 0, list)
    
        def processData(data):
            return data < 10 and data * 2 or data / 2
    
        def reduceList(list):
            return reduce(lambda x, y: x + processData(y), filterData(list), 0)
    
        def reduceMatrix(matrix):
            return reduce(lambda result, list: result + reduceList(list), filterList(matrix), 0)
    
        return reduceMatrix(input)
    

    @w1e3 python

    sum(map(lambda x: x/((cmp(x, 10)+1) or 0.5),
        itertools.chain(*[filter(lambda x: not x%2, s)
        for s in inputdata if len(s) > 5])))
    

    @Leksah Haskell

    sum [ if y < 10 then y*y else y | x <-inputdata, length(x) > 5 , y <- x , y `mod` 2 ==0 ] i
    

    @codeplayer Haskell

    sum' = sum
           . map (\x -> if x<10 then x*x else x)
           . filter ((==0) . (`mod` 2))
           . concat
           . filter ((>5) . length)
    

    @时蝇喜箭 Ruby

    inputdata.select{|seq| seq.length > 5}
        .map{|seq| seq.select{|num| num % 2 == 0}.map{|num| num < 10? num*2 : num/2}}
        .flatten.inject(&:+)
    

    @朴灵 Javascript&Underscore

    _.chain(inputdata)
        .filter(function (arr) { return arr.length > 5; })
        .map(function (arr) { return _.map(arr, function (num) { return num < 10 ? num * 2 : num; }); })
        .flatten()
        .reduce(function (memo, num) { return memo + num; }, 0)
        .value();
  • 相关阅读:
    实现SQL SERVER 下的PadLeft函数
    C#中String和string区别
    SQL经验分享(二)取得数据库中所有的表名、字段名以及字段属于哪个表
    JavaScript获取上传文件后缀名
    Url重写
    C#编程风格约定
    解决SharePoint 2003的爬网性能问题 之七
    [跨DB查询]查找SharePoint 2007中的Orphan Feature的SQL语句
    如何得到MOSS 2007的最近的100次爬网的信息
    解决SharePoint 2003的爬网性能问题 之八
  • 原文地址:https://www.cnblogs.com/lexus/p/2420395.html
Copyright © 2020-2023  润新知