python中哈希表的实现
我想用python实现哈希表。 由于散列的基本思想是将值存储在索引i中,其中i=hash_函数(key),因此我需要能够为列表/数组编制索引以存储值。但是,由于python中列表的大小用.append()扩展,hashList[i]语句将导致“列表分配索引超出范围”python中哈希表的实现,python,hash,Python,Hash,我想用python实现哈希表。 由于散列的基本思想是将值存储在索引i中,其中i=hash_函数(key),因此我需要能够为列表/数组编制索引以存储值。但是,由于python中列表的大小用.append()扩展,hashList[i]语句将导致“列表分配索引超出范围” 使用具有固定大小的列表并对其进行索引是否存在扭曲?还是使用ctype数组 下面是代码的外观: class Hash(): length = 1000 array = [] def __setitem__(
使用具有固定大小的列表并对其进行索引是否存在扭曲?还是使用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
使用具有固定大小的列表并对其进行索引是否存在扭曲 是,初始化数组 i、 e 然后,您可以继续在0-9999之间的任何索引中设置值 - 我应该使用ctype数组吗
Python lists are arrays
正如@mgilson所指出的,dict是python的内置哈希表,因此这个答案假设您这样做只是出于学术原因 有一种方法可以在python中创建一个固定大小的列表,其中填充了None值:
import itertools
hashSize = 100
myHashList = list(itertools.repeat(None, hashSize))
有关哈希表空间不足时如何操作的更多信息,请参阅。我假设这是“学术性的”--python已经有一个很棒的内置哈希表,名为
dict
创建一个列表,从listSize
manyNone
s开始。然后,可以考虑一个索引:<代码>没有<代码>为空散列。bucket@mgilson根据使用情况,OP也可以考虑使用<代码> SET>代码>如果你要预先定义你的数组,<代码> [NON] * 1000 应该快很多。这个哈希表实现无法处理冲突。消耗O(大小)时间?@user1203631但在添加功能中仍有足够的空间:谢谢,有没有一种方法可以像C++那样用O(1)构造哈希?
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.
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.