AttributeError:'list'对象在我的python堆排序中没有属性'A'

问题描述 投票:-1回答:1
import random, timeit

class Heap:
    def _init_(self,L=[]):
        self.A=L
    def _str_(self):
        return str(self.A)
    def _len_(self):
        return len(self.A)

    def heapify_down(self,k,n):
        while 2*k + 1<n:
            L,R=2*k + 1, 2*k + 2
        if L < n and self.A[L]> self.A[k]:
            m=L
        else:
            m=k
        if R<n and self.A[R] > self.A[m]:
            m=r
        if m != k:
            self.A[k], self.A[m] = self.A[m], self.A[k]
            k=m
        else:
            return

    def make_heap(self):
        n = len(self.A)
        for k in range(n-1,-1,-1):
            self.heapify_down(k,n)

    def heap_sort(self):
        n = len(self.A)
        for k in range(len(self.A)-1,-1,-1):
            self.A[0], self.A[k] = self.A[k],self.A[0]
            n=n-1
            self.heapify_down(0,n)

n = int(input())
random.seed()
A = []
for i in range(n):
    A.append(random.randint(-1000,1000))
B = A[:]
C = A[:]
print("Heap sort:")
print("time =", timeit.timeit("heap_sort(C)", globals=globals(), number=1))
print("  comparisons = {:10d}, swaps = {:10d}\n".format(Hc, Hs))

错误会这样发出:

Heap sort:
Makefile:6: recipe for target 'py3_run' failed
make: *** [py3_run] Error 1
Traceback (most recent call last):
  File "Main.out", line 43, in <module>
    print("time =", timeit.timeit("heap_sort(C)", globals=globals(), number=1))
  File "/usr/lib/python3.6/timeit.py", line 233, in timeit
    return Timer(stmt, setup, timer, globals).timeit(number)
  File "/usr/lib/python3.6/timeit.py", line 178, in timeit
    timing = self.inner(it, self.timer)
  File "<timeit-src>", line 6, in inner
  File "Main.out", line 30, in heap_sort
    n = len(self.A)
AttributeError: 'list' object has no attribute 'A'

我第一次遇到这种错误,所以我不知道该怎么办。在互联网上,它说“我的名单”有误。但是我认为我的代码并没有错,所以我仍然找不到错误的出处。您能帮我吗?

python heapsort
1个回答
0
投票

该方法应具有适当的缩进。

将方法保留在类中。

class Heap:
    def _init_(self,L=[]):
        self.A=L
    def _str_(self):
        return str(self.A)
    def _len_(self):
        return len(self.A)
    ...
    def heap_sort(self):
        n = len(self.A)
© www.soinside.com 2019 - 2024. All rights reserved.