Python: 对字符串进行取模
Python: Performing Modulo on Strings
我有几十亿个格式为 word0.word1.word2 的字符串,我希望对这些字符串执行模 n 以便我可以将每个字符串提供给数据库编写器进行存储。我知道我可以对字符串的第一个字符执行模 10 的形式,如下所示:
for i in ["a.b","c.d"]:
print ord(i[0]) % 10
不过,这不会平均划分我的字符串,因为 word0、word1 和 word2 按字母顺序排序,并且字符串的第一个字符通常是 "a"。我可以取字符串的最后一个字母,但不确定它们是否呈正态分布。
我的问题:有没有一种快速的方法可以对整个字符串执行类似 "ord" 的操作?我最终计划对字符串的整数表示进行 运行 模 48,并希望该模块化输出均匀分布在所有 48 个核心上。如果其他人可以提供任何帮助,我将不胜感激。
s = "whatever" # have a string
h = hash(s) # obtain its hash
bin = h % 48 # find the bin
更新:Python 的内置 hash
函数仅为单个进程提供确定性值。如果您想将此信息(直接或间接)保存在数据库中,您必须使用不包含任何随机数据的显式哈希函数。 (归功于@Alik)
我有几十亿个格式为 word0.word1.word2 的字符串,我希望对这些字符串执行模 n 以便我可以将每个字符串提供给数据库编写器进行存储。我知道我可以对字符串的第一个字符执行模 10 的形式,如下所示:
for i in ["a.b","c.d"]:
print ord(i[0]) % 10
不过,这不会平均划分我的字符串,因为 word0、word1 和 word2 按字母顺序排序,并且字符串的第一个字符通常是 "a"。我可以取字符串的最后一个字母,但不确定它们是否呈正态分布。
我的问题:有没有一种快速的方法可以对整个字符串执行类似 "ord" 的操作?我最终计划对字符串的整数表示进行 运行 模 48,并希望该模块化输出均匀分布在所有 48 个核心上。如果其他人可以提供任何帮助,我将不胜感激。
s = "whatever" # have a string
h = hash(s) # obtain its hash
bin = h % 48 # find the bin
更新:Python 的内置 hash
函数仅为单个进程提供确定性值。如果您想将此信息(直接或间接)保存在数据库中,您必须使用不包含任何随机数据的显式哈希函数。 (归功于@Alik)