Найти - Пользователи
Полная версия: Найти медиану.
Начало » Центр помощи » Найти медиану.
1 2 3
kozlo22
Необходимо найти в списке медиану.
Я тут сам написал что-то:
def checkio(data):
    data.sort()
    res = 0.0
    if len(data) / 2 > 0:
        res = data[int(len(data) / 2)]
    else:
        res = (data[int(round(len(data) / 2 - .5))] + data[int(round(len(data) / 2))])/2
    return res

Если передать список
 [3, 6, 20, 99, 10, 15]
, то вместо 12.5 выводит 15.
Когда выношу строку
(data[int(round(len(data) / 2 - .5))] + data[int(round(len(data) / 2))])/2
за оператор if считает нормально.
Singularity
def median(data):
    data = sorted(data)
    return data[len(data)//2]

kozlo22
то вместо 12.5 выводит 15.
откуда 12,5 возьмется ?
bismigalis
>>> import numpy as np
>>> np.median([3, 6, 20, 99, 10, 15])
12.5
kozlo22
Singularity
ну если запустить мой скрипт и вывести отсортированный список, то можно увидеть это (скриншот прикреплен).
(10+15)/2 = 12.5
Или я свернул когда-то не туда?..
kozlo22
bismigalis
спасибо, но мне хочется понять где ошибка в моем коде.
bismigalis
kozlo22
спасибо, но мне хочется понять где ошибка в моем коде.
здесь
kozlo22
len(data) / 2 > 0

нужно проверять остаток от деления
len(data) % 2
kozlo22
bismigalis
действительно.
Я так и думал, что затупил где-то на ровном месте.
Спасибо Вам. ;-)
kozlo22
Еще вопрос:
Почему при передаче списка вида
 [12,33,7,75,91,22,74,5,51,26,55,32] 
получаю не 32.5, а 33?
Как я не пытался делить на вещественное число или переводить делимое в вещественное, все равно 33.
JOHN_16
kozlo22
оборачивайте список к теги, иначе движок форума не воспринимает его как вы задумали. И по сему ваш вопрос не ясен
Aris_P@
kozlo22
Еще вопрос…
если длина списка четная, то здесь
res = (data[int(round(len(data) / 2 - .5))] + data[int(round(len(data) / 2))])/2
2 раза берется один и тот же элемент из массива.
round(12/2-0.5)=6.0, round(12/2)=6.0
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB