这有什么问题?我试图找到中位数之前和之后的数字的四分位数。但是输出不正确。
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)
答案 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()
在列表中找不到中位数。
因为这是在扫描整个列表,所以在函数的开头对列表进行排序实际上没有任何意义。