2016-12-26 3 views
0

Я пытаюсь определить медиану списка из n элементов, и я просто не вижу, что я делаю неправильно.Медиана в списке n элементов

У меня есть sorted(list), так что элементы находятся в правильном порядке, но я получаю медиану 5.0 вместо правильного 4.5.

Мой код выглядит следующим образом.

def median(lista): 
    median_even1 = 0 
    median_even2 = 0 
    median_sum = 0 
    median_average = 0 
    if len(lista) % 2 == 0: 
     sorted(lista) 
     median_even1 += lista[(len(lista)/2)] 
     median_even2 += lista[(len(lista)/2 - 1)] 
     median_sum = median_even1 + median_even2 
     median_average = (median_sum) // (2.0) 
     return median_average 
    else: 
     sorted(lista) 
     return lista[(len(lista)/2)] 

Любые предложения?

ответ

7

sorted() не на месте, он возвращает новый отсортированный список. Переставьте его (lista = sorted(lista)) или используйте вместо этого list.sort() (lista.sort()).

+0

OMG я чувствую себя так глупо, спасибо –

+0

Обратите внимание, что этот код все еще имеет несколько ошибок, по крайней мере, один из которых вызывает отслеживающий (на Python 3, поэтому я предполагаю, что это Python 2 ... до сих пор производит неправильный ответ). – TigerhawkT3

0
>>> 5//2.0 
2.0 
>>> float(5)/2.0 
2.5 

//2.0 не работает в этом случае

1

Вы можете упорядочить многое из этого кода, фиксируя ошибки (sorted() не работает в месте, len(lista)/2 быть число с плавающей точкой и, следовательно, не действительное значение индекса, используя // с плавающим литералом и предположительно ожидая точного поплавка и т. д.).

def median(lista): 
    lista = sorted(lista) 
    half = len(lista)//2 
    if half == len(lista)/2: 
     return (lista[half]+lista[half-1])/2. 
    return lista[half] 
Смежные вопросы