-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 に答える