这有什么问题呢?我试图找到中位数之前和之后的数字的四分位数。然而,输出是不正确的。
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)发布于 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()不会在列表中找到中位数。
因为这是扫描整个列表,所以在函数开始时对列表进行排序实际上没有任何意义。
https://stackoverflow.com/questions/56695589
复制相似问题