[英]Hashing a string in python returns the wrong result?
导师已将我设置为一项家庭作业,以创建一个对字符串进行哈希处理的过程,或者在某种意义上给出了哈希表中字符串的索引(如果已对其进行哈希处理)。
它应该返回11,但是返回0,有人可以帮助我找出原因吗?
def hash_string(keyword, buckets):
ords = []
for e in string_to_list(keyword):
ords.append(ord(e))
sum_of_ords = ords.pop()
for e in ords:
sum_of_ords = sum_of_ords * e
return sum_of_ords % buckets
print(hash_string('udacity', 12)) # should return 11 but returns 0?
这是string_to_list
,我知道可能有更好的方法,但这是我唯一知道的一种方法,无需使用Google搜索此类事情的内置方法
def string_to_list(str):
result_list = []
i = 0
while i < len(str):
result_list.append(str[i:i + 1])
i += 1
return result_list
这是我的导师描述答案的方式,但是我不理解他对h所做的事情吗? 这只是我正在尝试做的简化版本吗?
def hash_string(keyword, buckets):
h = 0
for c in keyword:
h = (h + ord(c)) % buckets
return h
似乎您要添加但在这里偶然乘以:
sum_of_ords = sum_of_ords * e
更改为:
sum_of_ords = sum_of_ords + e
或者,使用复合分配:
sum_of_ords += e
附带一提,您可以将功能简化为:
def hash_string(keyword, buckets):
return sum(ord(c) for c in keyword) % buckets
问题是您使用了一些不必要的函数,例如使用.pop()
, for
循环,并且您的hash_string
函数可以使用list(<string>)
替换。
例:
def hash_string(keyword, buckets):
ords = []
for e in list(keyword):
ords.append(ord(e))
return sum(ords) % buckets
这可以进一步简化为:
def hash_string(keyword, buckets):
return sum([ord(char) for char in list(keyword)]) % buckets
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.