2014-10-10 49 views
1

我正在嘗試使用一個字符串(鍵)並返回散列表的槽號的函數。 使得:(例如= 1,B = 2,C = 3,等等)使用字符串進行Python散列化

for key_word in ["John","Jane"]: 
    print(key_word, special_hash(key_word, 13)) 
>>> John 8 
    Jane 4 

該函數需要使用字母位置到字符串中的每個字母轉換成數字形式。所以哈希值將爲:John = 10 + 15 + 8 + 14 = 47 -----> = 47%tablesize(13)

+0

什麼是'tablesize'? – thefourtheye 2014-10-10 05:28:14

+0

做「J」和「j」哈希是否一樣? – mgilson 2014-10-10 05:28:19

+0

@thefourtheye - 我認爲表格大小是13。 – mgilson 2014-10-10 05:28:59

回答

0

使用ord函數並減去ascii偏移量(一個字母爲97代碼,b 98,依此類推)

>>> ascii_offset = ord('a')-1 #http://www.asciitable.com/ 
>>> def special_hash(word, tablesize): 
...  return sum([ord(c) - ascii_offset for c in word.lower() ]) % tablesize 
... 
>>> special_hash('John',13) 
8 
>>> ##47%13 -> 8 
+0

謝謝。我有很多錯誤試圖讓結構正確,但工作。 – Newbie 2014-10-10 05:35:39

2

您可以將字符串以lower功能爲小寫,並通過在單詞中的字符進行迭代,用for循環,這樣

def special_hash(word, tablesize): 
    for char in word.lower(): 
     ... 

然後,可以得到與該字符對應的字符代碼0功能。

def special_hash(word, tablesize): 
    total_value = 0 
    for char in word.lower(): 
     total_value += ord(char) - ord('a') + 1 

由於我們需要從字母中獲取字符的偏移量,因此可以從當前值中減去第一個值。最後,您可以使用模運算%通過tablesize

def special_hash(word, tablesize): 
    total_value = 0 
    for char in word.lower(): 
     total_value += ord(char) - ord('a') + 1 
    return total_value % tablesize 

同樣得到的餘數可以用generator expression succintly書面和內置sum功能,這樣

def special_hash(word, tablesize): 
    return sum(ord(char) - ord('a') + 1 for char in word.lower()) % tablesize 
+1

你當然爲它工作+1:P – 2014-10-10 06:28:15

相關問題