我不断得到错误:类型为';非类型';在python中没有len(),什么';代码怎么了?

我不断得到错误:类型为';非类型';在python中没有len(),什么';代码怎么了?,python,list,function,Python,List,Function,好的,这就是我正在使用的代码,它一直给我这个错误: def median(lst): slst = lst.sort() if len(slst) == 1: median = lst[0] else: index = len(slst) - 1 if len(slst) % 2 != 0: median_index = index / 2 median = slst[me

好的,这就是我正在使用的代码,它一直给我这个错误:

def median(lst):
    slst = lst.sort()
    if len(slst) == 1:
        median = lst[0]

    else:
        index = len(slst) - 1

        if len(slst) % 2 != 0:
            median_index = index / 2
            median = slst[median_index]

        else:
            upper_val_index = len(slst) / 2
            lower_val_index = upper_val_index + 1
            upper_val = slst[upper_val_index]
            lower_val = slst[lower_val_index]
            average = (lower_val + upper_val) / 2.0
            median = average

    return median
我已经尝试在列表中使用sorted()函数,但也不起作用。我刚开始学习python,所以不太复杂的答案非常感谢:)谢谢

实际上,.sort()方法通过更改列表中元素的顺序对列表本身进行排序,但它不返回任何内容,因此您有两个选择:

"""
1. Either use the .sort() method as lst.sort() # This will change the original list.
2. Use the sorted() method which returns a new list. and you can easily assign it to new variable.
"""
def median(lst):
    slst = sorted(lst)
    if len(slst) == 1:
        median = lst[0]

    else:
        index = len(slst) - 1

        if len(slst) % 2 != 0:
            median_index = index / 2
            median = slst[median_index]

        else:
            upper_val_index = len(slst) / 2
            lower_val_index = upper_val_index + 1
            upper_val = slst[upper_val_index]
            lower_val = slst[lower_val_index]
            average = (lower_val + upper_val) / 2.0
            median = average

    return median
下面是对代码的轻微修改,以使其能够令人满意地工作,请研究差异并尝试从错误中吸取教训,当然还有一些更好的方法可以实现同样的效果,但这需要最小的更改

def median(lst):
    slst = sorted(lst)
    if len(slst) == 1:
        median = lst[0]

    else:
        index = len(slst)

        if len(slst) % 2 != 0:
            median_index = index / 2
            median = slst[median_index]

        else:
            upper_val_index = len(slst) / 2
            lower_val_index = upper_val_index - 1
            upper_val = slst[upper_val_index]
            lower_val = slst[lower_val_index]
            average = (lower_val + upper_val) / 2.0
            median = average

    return median




print median([4,5,5,4])
>>> 4.5

print median([4,5,5,5,4])
>>> 5

修改现有列表的方法,如
排序
,不会返回任何内容。因此,您的代码将
slst
设置为无

相反,只需调用该方法而不指定:

def median(lst):
    lst.sort()
    if len(slst) == 1:
        median = lst[0]

或者,您可以使用
lst=sorted(lst)
,它确实会返回一个新列表,但这是不必要的。

哪一行引发该异常?向我们展示回溯。
sorted()
究竟如何不起作用?您尝试时发生了什么?@KirkStrauser我正在codecademy.com上学习python,但没有显示回溯。@iCodez使用sorted()会导致相同的错误,所以我只是说这不是问题所在。简单地修复代码而不解释错误是没有意义的。排序创建了一个新的列表,这样您的代码就不一样了。当我使用您的代码时,我没有得到错误,但我得到了错误的答案。当我用列表[4,5,5,4]调用函数时。它返回了5.0,这意味着它没有对列表进行正确排序。首先,请阅读您的问题,您已经询问了
len()
函数的
NoneType
问题,我试图解决这个问题,但我无法保证此后您是否暗示了正确的逻辑,尝试自己修复逻辑。创建一个新列表可能是可取的。让函数改变它的输入只是为了找到中间值有点“令人讨厌的惊喜”。代码中仍然有一个错误,因为每当我用列表[4,5,5,4]调用它时,它返回5.0,而它应该返回4.5。为什么排序不正确?@OmarMerhabi:这个函数排序很好。你的逻辑是错误的;添加
print(下值索引,上值索引)
查看错误。