Sum without highest and lowest number

输入一个列表,计算去掉列表里最大值和最小值后剩下所有元素相加的和

且如果输入的列表是一个空列表或者列表里只有一个元素,或者输入的是一个空值,返回0

  • example
    { 6, 2, 1, 8, 10 } => 16
    { 1, 1, 11, 2, 3 } => 6
solution 1, 第一次做这道题时候写的代码,写的非常初级并且思维还是比较低级,很多语法都没用到点子上
def sum_array(arr):
    if arr is None:
        return 0
    elif arr is []:
        return 0
    
    elif len(arr) > 2 :
        # print(arr)
        lst=sorted(arr)
        # print(lst)
        del lst[0]
        del lst[-1]
        # print(lst)
        sum=0
        for i in lst:
            sum+=i
        print(sum)
        return sum
    else:
        return 0
    return
----------------------------------------------------------------------------------

solution 2  学习了一段时间后了解到了一些内置函数和函数的简化的写法
def sum_array(arr):  # sorted()函数进行排序后,可以根据下标减去最小和最大值
    return 0 if arr is None or len(arr)<=1 else sum(arr)-sorted(arr)[0]-sorted(arr)[-1]

----------------------------------------------------------------------------------

solution 3 看到论坛大神的另一个解法,更加简洁
def sum_array(arr):  # 排序后直接切片(左闭右开区间)正好取值第二个元素到倒数第二个元素,并且 if arr 判断True or False 省略了len(arr) 和None 的判断
    return sum(sorted(arr)[1:-1]) if arr else 0

调用函数计算出值
sum_array([9, 3, 5, 1, 3, 8])
19
Process finished with exit code 0

值得注意的是solution 3里 对于None的判断, 是用 if arr 实现的, 意思是,如果是一个空列表或者是NoneType, 则返回一个布尔值False,否则是True,即可判断该条件.

posted @ 2022-04-26 14:27  大立出奇迹  阅读(48)  评论(0编辑  收藏  举报