首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得Python中列表的居中均值(不包括最大值和最小值)?

如何获得Python中列表的居中均值(不包括最大值和最小值)?
EN

Code Review用户
提问于 2015-09-23 10:52:59
回答 3查看 10.5K关注 0票数 0

我正在学习Python &从本站中练习,下面是具体的问题:

返回ints数组的“中心”平均值,我们将说它是值的平均值,除了忽略数组中的最大值和最小值之外。如果最小值有多个副本,则只忽略一个副本,对于最大值也忽略一个副本。使用int除法生成最终平均值。您可以假设数组的长度为3或更长。centered_average([1, 2, 3, 4, 100])3 centered_average([1, 1, 5, 5, 10, 8, 7])5 centered_average([-10, -4, -2, -4, -2, 0])-3

我的解决办法如下:

代码语言:javascript
复制
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

以上代码运行良好。我想问更有经验的程序员,是否可以以更好的方式完成-或者这个解决方案好吗?

EN

回答 3

Code Review用户

回答已采纳

发布于 2015-09-23 10:59:10

您可以将for-loop替换为

代码语言:javascript
复制
total = sum(nums)

内部变量也不需要。因此,只需用一行编写函数:

代码语言:javascript
复制
def centered_average(nums):
    return (sum(nums) - max(nums) - min(nums)) / (len(nums) - 2) 
票数 2
EN

Code Review用户

发布于 2015-09-23 11:01:20

如果你不太在意表现:

代码语言:javascript
复制
def centered_average(nums):
    return sum(sorted(nums)[1:-1]) / (len(nums) - 2)

否则就去找其他的答案。

票数 2
EN

Code Review用户

发布于 2015-09-23 11:04:52

您可以丢弃列表中的第一个和最后一个元素:

代码语言:javascript
复制
def centered_average(nums):
    #nums = sorted(nums)  # if input is not always sorted
    nums1 = nums[1:-1]
    return sum(nums1) / len(nums1)
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/108404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档