【问题标题】:HashSet __iter__ Python 3 [duplicate]HashSet __iter__ Python 3 [重复]
【发布时间】:2018-04-19 16:55:53
【问题描述】:

您好,过去一周左右我一直在做一些 HashSet 问题。最后一个问题要求我为我的 HashSet 创建 iter 方法。这是我的代码:

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() 返回了“list”类型的非迭代器。我应该返回什么??

输入:7 20 30 40 50 60 70 80 90
所需输出:[20, 30, 40, 50, 60, 70, 80, 90]

table var 中的值是正确的,我使用 print() 语句进行了测试。我该如何解决?

【问题讨论】:

    标签: python hash hashtable hashset


    【解决方案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
    

    【讨论】:

    • 谢谢,甚至不知道 iter() 存在 :D
    猜你喜欢
    • 2017-05-22
    • 2015-06-20
    • 1970-01-01
    • 2015-12-29
    • 2013-08-30
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多