我想在python中实现哈希表。 由于散列基本思想是将值存储在索引i中,其中i = hash_function(key),我需要能够索引列表/数组来存储该值。但是由于python中列表的大小随.append()扩展,hashList [i]语句将导致“列表赋值索引超出范围”。
使用固定大小的列表并正常编制索引是否存在扭曲?或者我应该使用ctype数组?
以下是代码的外观:
class Hash():
length = 1000
array = []
def __setitem__(self, key, value):
sum = 0
if key != None:
for letter in key:
sum = sum + ord(letter)
self.array[sum % self.length] = self.length
答案 0 :(得分:0)
使用固定大小的列表并正常编制索引是否存在扭曲?
是的,初始化您的阵列 即。
for i in range(0,1000):
array.append(None)
然后你可以继续在0-9999之间的任何索引中设置你的值
-
我应该使用ctype数组吗?
Python lists are arrays
答案 1 :(得分:0)
正如@mgilson所说,dict是python的内置哈希表,所以这个答案假设你出于学术原因这样做。
这是在python中创建固定大小列表的一种方法,填充无值:
import itertools
hashSize = 100
myHashList = list(itertools.repeat(None, hashSize))
有关在哈希表中空间不足时该怎么做的详细信息,请参阅Wikipedia: Hash Table - Dynamic resizing。
答案 2 :(得分:0)
class HashTable():
def __init__(self):
self.size = 1000
self.table = [None] * self.size
def add(self, item):
hashcode = self.hash(item)
if hashcode >= self.size:
# Resize the table.
self.size *= 2
# etc.
else:
self.table[hashcode] = item
def hash(self, item):
# Your implementation of a hash function.