首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:为什么我的代码有不正确的输出

Python:为什么我的代码有不正确的输出
EN

Stack Overflow用户
提问于 2019-06-21 08:55:52
回答 1查看 35关注 0票数 0

这有什么问题呢?我试图找到中位数之前和之后的数字的四分位数。然而,输出是不正确的。

from statistics import median
this_list = [5, 7, 9, 0, 1, 3, 13, 450, 20]
outliers = []
def find_outlier(integers):
  ordered = sorted(integers)
  integers = ordered
  the_median =  median(integers)
  print(integers)
  q1 = median(integers[:the_median]) #outputs 5
  q3 = median(integers[the_median:])
  print(q1, q3)
  iqr = q3 - q1
  get_outlier = 1.5 * iqr
  low_outlier = q1 - get_outlier
  high_outlier = q3 + get_outlier
  for number in integers:
    if number < low_outlier or number > high_outlier 
      outliers.append(number)
  print('Your outliers are:' + str(outliers))
find_outlier(this_list)
EN

回答 1

Stack Overflow用户

发布于 2019-06-21 09:14:23

the_median是中间值,而不是它的索引,所以integers[:the_median]不会在中间值之前返回子列表。您可以使用生成器来执行此操作:

q1 = median(x for x in integers if x < the_median)
q3 = median(x for x in integers if x > the_median)

请注意,使用median_index = integers.index(the_median)是不正确的。如果原始列表中有偶数个值,则中位数不会是其中一个值,它将是中间两个值的平均值。所以index()不会在列表中找到中位数。

因为这是扫描整个列表,所以在函数开始时对列表进行排序实际上没有任何意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56695589

复制
相关文章

相似问题

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