我正在学习Python &从本站中练习,下面是具体的问题:
返回ints数组的“中心”平均值,我们将说它是值的平均值,除了忽略数组中的最大值和最小值之外。如果最小值有多个副本,则只忽略一个副本,对于最大值也忽略一个副本。使用int除法生成最终平均值。您可以假设数组的长度为3或更长。
centered_average([1, 2, 3, 4, 100])→3centered_average([1, 1, 5, 5, 10, 8, 7])→5centered_average([-10, -4, -2, -4, -2, 0])→-3
我的解决办法如下:
def centered_average(nums):
items = len(nums)
total = 0
high = max(nums)
low = min(nums)
for num in nums:
total += num
aveg = (total -high-low) / (items-2)
return aveg以上代码运行良好。我想问更有经验的程序员,是否可以以更好的方式完成-或者这个解决方案好吗?
发布于 2015-09-23 10:59:10
您可以将for-loop替换为
total = sum(nums)内部变量也不需要。因此,只需用一行编写函数:
def centered_average(nums):
return (sum(nums) - max(nums) - min(nums)) / (len(nums) - 2) 发布于 2015-09-23 11:01:20
如果你不太在意表现:
def centered_average(nums):
return sum(sorted(nums)[1:-1]) / (len(nums) - 2)否则就去找其他的答案。
发布于 2015-09-23 11:04:52
您可以丢弃列表中的第一个和最后一个元素:
def centered_average(nums):
#nums = sorted(nums) # if input is not always sorted
nums1 = nums[1:-1]
return sum(nums1) / len(nums1)https://codereview.stackexchange.com/questions/108404
复制相似问题