2017-05-01 1 views
0

J'essaie de mettre en œuvre une table de hachage avec chaînage. (m = 191) Mais quand je teste mon code, le tableau apparaît vide!HashTable est vide

table = [[] for x in range(191)] 

def hash_function (k): 
    return k % 191 

def insert (table,key): 
    table[hash_function(key)].append((hash_function(key),key)) 

with open("test.txt", "r") as file: 
    for seq in file: 
     seq_int= [ord(c) for c in seq] 
     int = seq_int[0] * 128 ** 3 \ 
      + seq_int[1] * 128 ** 2 \ 
      + seq_int[2] * 128 + seq_int[3] 
     insert(table,int) 

print table 

Je lis la chaîne à partir d'un fichier texte qui contient 1000 mots (une par ligne) de longueur 4.

+1

En premier lieu, appeler une variable 'int' est une très mauvaise idée ** **, parce que' int() 'est une fonction intégrée. deuxièmement, quel est le point d'insérer un tuple de clé une valeur dans la liste si la clé est l'index de la liste? Troisièmement, 'table' est une variable globale, il ne sert à rien de la passer en paramètre à' hash_function'. – DyZ

+0

J'ai couru votre code, et 'table' n'est pas vide. –

+0

Il ne montre rien après l'exécution de l'insert(). – user3085433

Répondre

0

Cela pourrait ne pas être exactement ce que vous cherchez, mais vous devriez examiner utiliser defaultdict dans le futur (par exemple, construire proprement des dictionnaires où la valeur est une liste que vous construisez et où cette liste devrait être initialisée à la liste vide sur le premier accès-clé).

https://docs.python.org/2/library/collections.html#collections.defaultdict