【问题标题】:Trying to double an array and hash values in python试图在python中将数组和哈希值加倍
【发布时间】:2014-05-20 12:05:59
【问题描述】:

我正在创建一个散列函数,但对将大小加倍、重新散列值、然后继续使用新表感到困惑。我所做的是创建一个单独的数组来只存储键,这样我就可以重新散列它(因为 self.table 存储键和值)但是当我运行它时,它会创建新表但值的散列最终没有发生。谁有想法?

class Hashing(object):

def __init__(self,size):
    self.array_size = size
    self.table = self.array_size * [None]
    self.size = 0  
    self.keyList = []

def _hash(self,key):
    pos = key
    print key, " ", pos % self.array_size
    return pos % self.array_size

def doubleSize(self):
    self.array_size = self.array_size*2
    self.table = (self.array_size) * [None]
    doubleHash = Hashing(self.array_size)
    i = 0
    for each in self.keyList:
        print "Each ", each
        doubleHash[each] = i
        i += 1
    print "double", self.table    


def __setitem__(self,key,value):
    if self.size > self.array_size/2:
        self.doubleSize()
    pos = self._hash(key)
    while True:
        if self.table[pos] is not None:
            if self.table[pos][0] == key:
                self.table[pos] = (key,value)
                return
        else:
            self.table[pos] = (key,value)
            self.keyList.append(key)
            self.size += 1
            return
        pos = (pos + 1) % self.array_size

和 main(因为 Python 没有更好的词...)

    from Hashing import Hashing

    myHash = Hashing(4)
    i = 0
    myArray = [1,12,13,11]
    for each in myArray:
        myHash[each] = i
         i += 1

【问题讨论】:

    标签: python arrays hash double


    【解决方案1】:

    您的问题的根源在于这一行:doubleHash = Hashing(self.array_size)。 您正在创建一个全新的 Hashing 对象,而您应该只是更改 self.当doubleHash 超出范围时,doubleHash 对象在doubleSize 方法的末尾被丢弃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-03
      • 2021-10-21
      • 2014-07-10
      • 1970-01-01
      • 2020-06-08
      • 2010-10-18
      • 2015-06-13
      • 2010-12-11
      相关资源
      最近更新 更多