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

def median(lst):

    lst = lst.sort()
    median = 0

    if len(lst) == 1:
        median = lst[0]            
    elif len(lst) % 2 == 0:
        median_sum = lst[len(lst) / 2 - 1] + lst[len(lst) / 2 + 1]
        median = median_sum / 2.0
    else:
        median = lst[len(lst)/ 2 - 1]

    return median

print median([1])

Выше мой код, и он продолжает выдавать мне следующую ошибку:

Traceback (most recent call last):
  File "C:/Python27/SAVED DOCS/test3.py", line 16, in <module>
    print median([1])
  File "C:/Python27/SAVED DOCS/test3.py", line 6, in median
    if len(lst) == 1:
TypeError: object of type 'NoneType' has no len()

Кажется, что у меня возникла проблема со вызовом len (lst), где lst = [1], потому что python, кажется, думает, что это переменная None? Я в замешательстве.

На консольном терминале для Python я могу набрать len ([1]) и получить результат 1 без каких-либо проблем. Также имейте в виду, я полностью осознаю, что это не лучший способ сделать то, что я пытаюсь сделать, но я только начинаю изучать Python!

Есть идеи?

0
tdeoliveira05 6 Янв 2017 в 19:45

4 ответа

Лучший ответ

lst.sort() сортирует список на месте и возвращает None. Поэтому lst = lst.sort() устанавливает lst на None.

Я думаю, что лучшее решение сделать

lst = sorted(lst)

Это не меняет список на месте, поэтому переменные, ссылающиеся на тот же список за пределами этой функции, остаются неизменными.

8
RemcoGerlich 6 Янв 2017 в 16:55

Думаю, ваша проблема в том, что lst.sort () возвращает None.

«Ошибка типа: объект типа 'NoneType' не имеет len ()"

Посмотрите, как решить это здесь. Почему «.sort ()» сделать список «Нет» в Python?

0
Community 23 Май 2017 в 12:01

Ваш заголовок ошибочен. list.sort () возвращает None, так как работает параллельно эффект ; первая строка отбрасывает список.

0
Yann Vernier 6 Янв 2017 в 16:49

Вместо использования lst.sort(), который возвращает None, вы можете использовать sorted() встроенная функция, как показано ниже:

lst = sorted(lst)

Теперь lst содержит ваш отсортированный список.

0
ettanany 6 Янв 2017 в 16:54