无Type对象不可订阅

时间:2012-08-14 16:58:06

标签: python

我试着解决它但是,我不能...... 请帮帮我,我不知道为什么会出现这个错误。

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,[])   

2 个答案:

答案 0 :(得分:2)

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

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

此外,您正在处理列表的remove()方法,就好像它返回一个列表一样。它不是;它修改了列表,但返回None。这也是错误的可能来源。

顺便说一句,嵌套功能的方式通常不是一个好主意。每次调用外部函数时都会重新定义内部函数,这可能会显着降低性能,特别是如果在循环中调用外部函数。 (同样适用于import,每次调用sorted_point_list()时都会执行。{/ p>

答案 1 :(得分:1)

问题似乎是lst.remove(c)remove()更改了列表并返回None。你假设它是一个列表。

max_distance()内,您将lst[0]传递给distance(),对于None,它会引发错误None Type object is not subscriptable