2017-11-07 10 views
0

こんにちは私は過去1週間ほどHashSetの質問をしてきました。最後の質問では、私のHashSetのiterメソッドを作成するように求められています。動作するようには思えないし、それは私にエラーを与えるHashSet __iter__ Python 3

class HashSet: 
    def __init__(self, capacity=10): 
     self.table = [None] * capacity 

    def add(self, item): 
     h = hash(item) 
     index = h % len(self.table) 

     if self.table[index] == None: 
      self.table[index] = LinkedList() 

     if item not in self.table[index]: 
      self.table[index].add(item) 

    def __iter__(self): 
     table = [] 
     ptr = None 
     for i in range(0, len(self.table)): 
      if self.table[i]: 
       ptr = self.table[i].head 
       while ptr != None: 
        table.append(ptr.item) 
        ptr = ptr.next 
     return sorted(table) 

:ここに私のコードは例外TypeError:ITER()型「リスト」の非反復子を返しました。私は何を返さなければならないのですか?

入力:7 20 30 40 50 60 70 80 90
所望の出力:テーブルVAR内部[20, 30, 40, 50, 60, 70, 80, 90]

値が、私は、印刷()文であることをテストした正しいです。どうすれば修正できますか?

答えて

1

あなたはイテレータを返すかyield fromを使用して繰り返しを委任する必要があります。

def __iter__(self): 
    ... 
    return iter(sorted(table)) # creates an iterator from the list 

それとも

def __iter__(self): 
    ... 
    yield from sorted(table) # Python 3's generator delegation syntax 
+0

おかげで、(ITERを知らなかった)でも存在していた:D –