我正在尝试创建一个带字符串(键)的函数,并返回哈希表的插槽号。 这样:
for key_word in ["John","Jane"]:
print(key_word, special_hash(key_word, 13))
>>> John 8
Jane 4
该函数需要使用字母位置将字符串的每个字母转换为数字形式(例如,a = 1,b = 2,c = 3等)。所以散列将是:John = 10 + 15 + 8 + 14 = 47 -----> = 47%tableize(13)
答案 0 :(得分:2)
您可以使用lower
函数将字符串转换为小写,并使用for
循环遍历单词中的字符,如下所示
def special_hash(word, tablesize):
for char in word.lower():
...
然后,您可以使用ord
函数获取与该字符对应的字符代码。
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和内置sum
函数可以写出相同的内容,就像这样
def special_hash(word, tablesize):
return sum(ord(char) - ord('a') + 1 for char in word.lower()) % tablesize
答案 1 :(得分: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