美文网首页
python3 实现从一个无序列表中求取连续元素之和中最大的和

python3 实现从一个无序列表中求取连续元素之和中最大的和

作者: AmanWang | 来源:发表于2020-11-11 10:46 被阅读0次

    介绍

    今天遇到一个需求,要求从一个无序列表中求取连续元素之和中最大的和。使用python做了实现,后来想着可以作为一个小知识点分享出来,或许能在某时某刻给某位同学一些帮助。下面就直接上代码:

    1、简单版

    说明:

    1. 传参必须是列表,否则会抛异常
    2. 返回值为符合要求的和
    def getMaxSum(li):
        # 要求计算给定列表中连续元素的和中最大的值
        sumList = []
        for i in range(0, len(li)):
            jj = i + 1
            maxIndex = len(li)
            # while jj < maxIndex+1:  # 包含单元素
            while jj < maxIndex:  # 至少两个元素
                subList = [li[i]]
                subList.extend([li[ii] for ii in range(jj, maxIndex)])
                sumList.append(sum(subList))
                maxIndex -= 1
        return max(sumList)
    

    调用

    if __name__ == '__main__':
        print('结果1:', getMaxSum([3, -4, 2, -4, -9, 8, -7]))
        print('结果2:', getMaxSum([3, 4, 2, 4, 9, 8, 7]))
        print('结果3:', getMaxSum([-3, -4, -2, -4, -9, -8, -7]))
        print('结果4:', getMaxSum([0, 0, 0, 0]))
    结果
    结果1: 1
    结果2: 37
    结果3: -6
    结果4: 0
    
    1、扩展版

    说明:

    1. 传参必须是数字列表,否则返回-1
    2. 返回值为一个元组,第一个元素为所求的最大和,第二个元素为一个列表,列表中的是符合条件的连续元素组成的列
    def getMaxSum(li):
        # 要求计算给定列表中连续元素的和中最大的值,并返回对应的元素
    
        # 如果传参不是列表类型或者列表元素中有非数字元素,返回False
        if not isinstance(li, list) or [x for x in li if not isinstance(x, (int, float))]:
           return False
    
        sumList = []
        subList = []
        targetList = []
    
        # 处理目标列表
        for i in range(0, len(li)):
            jj = i + 1
            maxIndex = len(li)
            # while jj < maxIndex+1:  # 包含单元素
            while jj < maxIndex:   # 至少两个元素
                temSubList = [li[i]]
                temSubList.extend([li[ii] for ii in range(jj, maxIndex)])
                temMaxSum = sum(temSubList)
                subList.append([temSubList, temMaxSum])
                sumList.append(temMaxSum)
                maxIndex -= 1
    
        # 获取连续元素之和中最大的值
        targetSum = max(sumList)
    
        # 获取符合要求的元素的列表
        for item in subList:
            temSum = item[1]
            if temSum == targetSum:
                targetList.append(item[0])
    
        # 返回元组,第一个元素为所求的最大和,第二个元素为一个列表,列表中的是符合条件的连续元素组成的列表,可能有多个
        return targetSum, targetList
    

    调用

    if __name__ == '__main__':
        print('结果1:', getMaxSum([3, -4, 2, -4, -9, 8, -7]))
        print('结果2:', getMaxSum([3, 4, 2, 4, 9, 8, 7]))
        print('结果3:', getMaxSum([-3, -4, -2, -4, -9, -8, -7]))
        print('结果4:', getMaxSum([0, 0, 0, 0]))
        print('结果5:', getMaxSum([3, -4, 2, -4, '-9', 8, -7]))
    结果
    结果1: (1, [[3, -4, 2], [8, -7]])
    结果2: (37, [[3, 4, 2, 4, 9, 8, 7]])
    结果3: (-6, [[-4, -2], [-2, -4]])
    结果4: (0, [[0, 0, 0, 0], [0, 0, 0], [0, 0], [0, 0, 0], [0, 0], [0, 0]])
    结果5: False
    

    相关文章

      网友评论

          本文标题:python3 实现从一个无序列表中求取连续元素之和中最大的和

          本文链接:https://www.haomeiwen.com/subject/ablebktx.html