python中的哈希表实现

时间:2013-11-27 21:38:59

标签: python hash

我想在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

3 个答案:

答案 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.