我尝试使用线性探测实现可清除列表。
我的哈希键是key%tablesize
基本上,我无法弄清楚当发生碰撞时如何遍历列表中的其他元素。我写过:
def hash_linear(key, values):
tablesize=len(values)
index=key%tablesize
if values[index]==None:
values[index]=key
else:
while values[index]!=None:
index+=1
values[index]=key
return values
我知道问题是索引不断增加,但我不知道如何停止索引并在它到达列表中的最后一个索引时再次启动它?
答案 0 :(得分:1)
使用modulo,使用列表的长度来包围:
In [15]: l = [1,2,3]
In [16]: l[4 % len(l) ]
Out[16]: 2
In [17]: l[1 % len(l) ]
Out[18]: 2
答案 1 :(得分:1)
我想你想要以下::
while values[index] is not None:
index = (index+1)% len(values)