繁体   English   中英

在python中将字符串哈希返回错误的结果?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM