Python: почему мой код имеет неправильный вывод - PullRequest
0 голосов
/ 21 июня 2019

Что с этим не так? Я пытаюсь найти квартили чисел до и после медианы. Однако вывод неверный.

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 голосов
/ 21 июня 2019

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() не найдет медиану в списке.

Поскольку выполняется сканирование всего списка, на самом деле нет смысла сортировать список в начале функции.

...