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_()测试它。
。