Я прохожу Codeacademy и выполняю упражнения на Python 3. У меня возникли проблемы с получением хороших результатов в упражнении «Медиана».
я получаю сообщение об ошибке
TypeError: list indices must be integers or slices, not float.
Я попытался преобразовать индексы в числа с плавающей запятой. Я не могу использовать деление пола (//), потому что мне нужно, чтобы в результате было возвращено нецелое число.
def median(lst):
sorted_list = sorted(lst)
if len(sorted_list) % 2 != 0:
index = len(sorted_list)//2
return sorted_list[index]
elif len(sorted_list) % 2 == 0:
index_1 = (len(sorted_list)/2)
index_2 = (len(sorted_list)/2) - 1
mean = (sorted_list[index_1] + sorted_list[index_2])/2
return mean
print(median([1, 6, 5, 47, 3, 100, 59, 36, 4, 38]))
Любая помощь от гуру будет принята с благодарностью. Спасибо!






Индекс элемента в списке — это его позиция в списке.
example_list = [1, 1, 4, 5, 5, 9]
Здесь, если вам нужно среднее значение, вы должны усреднять два средних значения: 4 и 5. Если вы делаете это, находя len(example_list) / 2 и принимая это как индекс, ваш индекс не является целым числом, поэтому он не указать позицию в списке.
Какова 3.0 позиция чего-либо? Это не имеет смысла. Вам нужно использовать целые числа только при взятии срезов. В твоем случае:
elif len(sorted_list) % 2 == 0:
index_1 = (len(sorted_list) // 2)
index_2 = (len(sorted_list) // 2) - 1
mean = (sorted_list[index_1] + sorted_list[index_2]) / 2
return mean
Редактировать:
Всякий раз, когда вы используете /, ваш ответ будет плавающим. Даже если математически результат является целым числом, он будет возвращен как x.0, а не x.
Используйте (//) для index_1 и index_2. ваш результат будет плавающим, потому что для среднего использования (/)