Python哈希表问题

2301_81018563 2024-09-20 23:28:27

代码

class Haxi:
    class Lianbiao:
        def __init__(self, item):
            self.item = item
            self.next = None
    class LinkListIterator:
        def __init__(self,node):
            self.node=node
        def __next__(self):
            if self.node:
                cur_node=self.node
                self.node=cur_node.next
                return cur_node.item
            else:
                raise StopIteration
        def __iter__(self):
            return self
    def __init__(self,li=None):
        self.head=None#当传进来的li是空,头结点和尾节点都是空
        self.end=None
        if li:#当传进来的li不为空时
            self.extend(li)#把数据加入列表,用函数来实现
    def extend(self,li):
        for i in li:
            self.append(i)
    def append(self,i):#尾插法插入链表
        s=Haxi.Lianbiao(i)
        if not self.head:#如果列表为空
            self.head=s#插入的当头结点
            self.end=s
        else:
            self.end.next=s#尾插法
            self.end=s
    def __iter__(self):#迭代器类,让链表支持迭代器
        return self.LinkListIterator(self.head)
    def find(self,obj):
        for i in self:
            if i==obj:
                return True
            else:
                return False
    def __repr__(self):#repr()方法定义了实例化对象的输出信息,重写该方法,可以输出我们想要的信息
        return "<-"+",".join(map(str,self))+"->"#",".join()表示把()里的东西用,隔开组成一个新的字符串,map(str,self)表示把self里的每一个元素作用与str函数,str()函数将指定的值转换为字符串
lk=Haxi([1,2,3,4,5])
# for i in lk:#有了迭代器类,链表才能支持迭代
#     print(i)
# print(lk)
class Haxibiao:
    def __init__(self,len=101):
        self.len=len
        self.T=[Haxi() for i in range(self.len)]#建一个列表,每个元素都是一个链表
    def h(self,k):
        return k % self.len
    def insert(self,k):
        i=self.h(k)
        if self.find(k):
            print("不能插入重复的元素")
        else:
            self.T[i].append(k)
    def find(self,k):
        i=self.h(k)
        return self.T[i].find(k)#这里进行查找是为了去重,看即将插入的k是不是在列表中已经有了
H=Haxibiao()
H.insert(1)
H.insert(0)
H.insert(3)
H.insert(4)
H.insert(102)
H.insert(508)
print(",".join(map(str,H.T)))#打印哈希表T
print(H.find(5))
print(H.find(102))

问题

倒数第二行为什么输出None,而不是False

倒数第一行为什么输出False,不是已经插入了吗

...全文
74 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

解决了兄弟们
def find(self,obj):
for i in self:
if i==obj:
return True
else:
return False这一段有问题,没有遍历完整
改成
def find(self, obj):
node = self.head
while node:
if node.item == obj:
return True
node = node.next
return False问题就解决了

5,954

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用python
社区管理员
  • Python 学习者
  • 嗨学编程
  • 松鼠爱吃饼干
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎来到Python学习者们的社区,

 

本社区分享你需要的文章、问题解答、技术互助、学习资源、面试系列等等

 

欢迎你的加入,祝你学有所成~

试试用AI创作助手写篇文章吧