-8

我尝试修复它,但是,我不能....请帮助我,我不知道为什么它会显示该错误。

def sorted_point_list(lst):
    import math
    def distance(point):
        return math.sqrt(point[0]**2 + point[1]**2)
    def max_point(lst):
        def max_distance(lst):
            if lst == []:
                return 0 
            else:
                return max(distance(lst[0]),max_distance(lst[1:]))
        a = max_distance(lst)
        for i in lst:
            if distance(i) == a:
                return i
    def iter_(lst,result):
        if lst == []:          
            return result
        c = max_point(lst)
        return iter_(lst.remove(c),c+result)
    return iter_(lst,[])   
4

2 回答 2

2

这通常发生在您获得None某个东西的返回值时,您假设您将获得一些其他值(在这种情况下为列表)。

您的max_point()函数并非在所有情况下都返回值。因此,它None在这些情况下返回。这是您收到的错误消息的可能来源。

此外,您将remove()列表的方法视为返回列表。它不是; 它会修改列表但返回None. 这也是错误的可能来源。

顺便说一句,嵌套函数通常不是一个好主意。每次调用外部函数时都会重新定义内部函数,这可能会显着降低性能,尤其是在循环调用外部函数时。(类似地,import每次调用时都会执行sorted_point_list()。)

于 2012-08-14T17:03:46.630 回答
1

问题似乎是这样lst.remove(c)remove() 更改列表并返回None。您假设它是此处的列表。

在里面max_distance()你传递lst[0]distance(),因为None它会引发错误None Type object is not subscriptable

于 2012-08-14T17:02:05.597 回答