【问题标题】:Python: Why does my code have incorrect outputPython:为什么我的代码输出不正确
【发布时间】:2019-06-21 00:55:51
【问题描述】:

这有什么问题?我试图找到中位数前后的四分位数。但是输出不正确。

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)

【问题讨论】:

  • median() 返回中值,而不是它的索引。
  • 所以integers[:the_median] 不会做你想做的事。

标签: python outliers


【解决方案1】:

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() 不会在列表中找到中位数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多