【发布时间】:2015-04-11 08:04:47
【问题描述】:
我一直在尝试为我的MyHashTable: 类编写一个insert(self, key): 方法。
它应该使用线性探测来处理冲突解决方案。如果键已经在表中,则该方法返回-2。如果键不在表中并且存在空槽,则将键输入到hash_function 返回的空槽号中,并返回该槽号。如果键不在哈希表中并且没有空槽,则返回-1。
这是我的课:
class MyHashTable:
def __init__(self, capacity):
self.capacity = capacity
self.slots = [None] * self.capacity
def __str__(self):
return str(self.slots )
def __len__(self):
count = 0
for i in self.slots:
if i != None:
count += 1
return count
def hash_function(self, key):
i = key % self.capacity
return i
def insert(self, key):
slot = self.hash_function(key)
if key in self.slots[slot]:
return -2
elif key in self.slots[slot] == False:
return -1
else:
self.slots[slot].append(key)
return slot
测试是:
x = MyHashTable(2)
print("Add 3, return:", x.insert(3))
print("Hashtable:", x)
print("Add 3, return:", x.insert(3)) #duplicate
print("Hashtable:", x)
结果应该是:
Add 3, return: 1
Hashtable: [None, 3]
Add 3, return: -2
Hashtable: [None, 3]
我尝试了一些方法,但不断收到错误消息。 “Nonetype”不可迭代。
【问题讨论】:
-
您的代码中没有插入方法。这使得诊断您遇到的问题有点困难:-)
-
是的。我需要写一个.....
-
您不会从添加的代码中得到“NoneType is not iterable”,
pass没有迭代随机集合的习惯 :-) 我建议您添加一个尝试。 -
当您收到错误消息时,最好发布 full 错误消息(在代码块中),从
Traceback行开始;并发布发生该错误的代码部分。如果您这样做了,那么回答您问题原因的人会立即明白。 -
FWIW,您收到了
"Nonetype" is not iterable消息,因为您的insert()正试图将key附加到None。实际上,您的insert()的逻辑似乎将self.slots视为列表列表。这是组织哈希表的一种合法方式,但它与您班级的其他人不一致。
标签: python hash insert hashtable