Python 无类型对象不可下标

Python 无类型对象不可下标,python,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 == []:

我试图修复它,但我不能。。。。 请帮帮我,我不知道为什么它会显示那个错误

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

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


max_distance()
内,您要将
lst[0]
传递到
distance()
,对于
None
它将引发错误
None类型对象不可下标

这通常发生在您将
None
作为某个对象的返回值时,您假设您将获得其他值(本例中的列表)

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

另外,您将list的
remove()
方法视为返回一个list。它没有;它就地修改列表,但返回
None
。这也是错误的一个可能来源


另一方面,嵌套功能的方式通常不是一个好主意。每次调用外部函数时,内部函数都将被重新定义,这可能会对性能造成重大损失,特别是在循环中调用外部函数时。(类似地,对于
导入
,每次调用
排序点列表()
时都会执行该导入)

请发布完整的错误消息(即回溯),以便我们知道在何处查找。这是一个非常常见的错误,它意味着返回的是一个函数
,而不是一个列表。调用此函数时使用的是什么列表?我给它的任何列表(例如,
sorted\u point\u list([4,9,1])
抛出一个
TypeError:“int”对象没有属性“\uu getitem\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”
error。该列表将类似于[[1,2],[3,4],[5,5]]…感谢此代码看起来像lisp而不是惯用的Python。我认为max\u point()也是错误的,然后我尝试了max\u point(单个零件,它可以给我一个正确的返回值作为一个点。max_distance()可以返回一个我单独测试它的值。@user1598686使用
iter_()测试它。