关于hash:HashSet __iter__ Python 3

HashSet __iter__ Python 3

本问题已经有最佳答案,请猛点这里访问。

你好,我这一周来一直在做一些哈希集问题。最后一个问题要求我为哈希集创建ITER方法。这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)

它似乎不起作用,给了我一个错误:type error:iter()返回了类型为"list"的非迭代器。我该返回什么??

输入:7 20 30 40 50 60 70 80 90。期望输出:[20, 30, 40, 50, 60, 70, 80, 90]

表var中的值是正确的,我用print()语句测试了它。我该怎么修?


您应该返回迭代器或使用yield from委托迭代:

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

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