我一直在嘗試爲我的MyHashTable:
類寫一個insert(self, key):
方法。Python哈希值:插入方法
它應該使用線性探測來處理衝突解決。如果密鑰已在表格中,則該方法返回-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」不可迭代。
代碼中沒有插入方法。這使得診斷您遇到的問題變得有點困難:-) – paxdiablo 2015-02-11 03:32:56
是的。我需要寫一個..... – Newbie 2015-02-11 03:35:04
你不會從那個添加的代碼中獲得「NoneType不可迭代」,'pass'不是習慣於迭代隨機集合:-)我建議你添加一個你的嘗試。 – paxdiablo 2015-02-11 03:38:26