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

时间:2019-06-21 00:55:51

标签: python outliers

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

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)

1 个答案:

答案 0 :(得分:0)

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

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