【发布时间】:2018-03-13 01:51:47
【问题描述】:
我有一个用户定义的函数,它以表格大小 (m) 作为输入。我实现了一个该大小的空列表(由对 [key,count] 组成,本质上是一个具有两个字段的数组),并使用线性散列将生成的随机数插入到列表中。所以假设第一个随机数 (k) 是 20,列表的长度 (m) 是 9,哈希函数 (h0 = k%m) 将返回 2(因为这是 20 除以 9 的余数)。如果该单元格为空,我想将键值(k)插入第一个字段,将 1(探测计数)插入第二个字段。如果该单元格不为空,我想使用哈希函数 (h0 = (h0 + i)%m) 递增索引,直到找到一个空单元格并插入其中。我想返回结果列表。我的函数中有一个 return 语句,我读过的文档说当我调用函数时分配一个新值并使用 print 语句应该可以工作。我正在使用 PyCharm 社区版。我的IDE可能是问题吗? (下面是我的代码)
import random
def linear(m):
hTable = [[None, None] for j in range (m)]
for n in range (1100):
k = random.randint(1,10000)
for i in range(len(hTable)):
for j in range(len(hTable[i])):
h0 = k % m
if hTable[h0] == [None,None]:
hTable[h0][0] = k
hTable[h0][1] = 1
else:
while hTable[h0] != [None, None]:
hTable[h0][1] += 1
h0 = (h0 + i)%m
else:
hTable[h0][0] = k
hTable[h0][1] = 1
return hTable
hash = linear(1223)
print(hash)
【问题讨论】:
-
我忘了说当我运行脚本时,我没有得到任何返回错误,但我也没有得到我想要的输出。我唯一的输出是“进程以退出代码 0 完成”
-
您是否只是忘记调用您的函数?类似
linear(5)。 -
您正在对以下行中的 None 类型的对象执行 len 函数:
for j in range(len(hTable[i])):。您的意思是将 hTable 设置为二维数组吗?如果您希望 hTable 是二维的,您可以这样做:hTable = [[None for x in range(width)] for y in range(height)]。希望这会有所帮助。 -
@ImportanceOfBeingErnest 该函数的调用在上面的脚本中。
-
@BKovac 是的,我将列表实现更改为“hTable = [[[] for i in range(2)] for j in range (m)]”。
标签: python function hash return hashtable