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,即可判断该条件.