- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否有可用的库或代码片段可以接受两个字符串并返回两个字符串之间的精确或近似中点字符串?
最好使用 Python 编写代码。
从表面上看这似乎是一个简单的问题,但我正在努力解决它:
U+0088 c2 88 <control>
我问的原因是因为我希望编写 map-reduce 类型的算法来从我们的数据库中读取所有条目并处理它们。数据库中的主键是字符随机分布的 UTF-8 编码字符串。我们使用的数据库是 Cassandra。
希望从数据库中获取最低键和最高键,然后通过找到中点将其分成两个范围,然后通过找到它们的每个中点将这两个范围分成两个较小的部分,直到我有几千个部分,然后我可以异步阅读每个部分。
如果字符串是 base-16 编码的示例:(一些中点是近似值):
Starting highest and lowest keys: '000' 'FFF' / \ / \ '000' '8' '8' 'FFF' / \ / \ / \ / \Result: '000' '4' '4' '8' '8' 'B8' 'B8' 'FFF'(After 3 levels of recursion)
最佳答案
不幸的是not all sequences of bytes是有效的 UTF-8,因此仅取 UTF-8 值的中点并非易事,如下所示。
def midpoint(s, e):
'''Midpoint of start and end strings'''
(sb, eb) = (int.from_bytes(bytes(x, 'utf-8'), byteorder='big') for x in (s, e))
midpoint = int((eb - sb) / 2 + sb)
midpoint_bytes = midpoint.to_bytes((midpoint.bit_length() // 8) + 1, byteorder='big')
return midpoint_bytes.decode('utf-8')
基本上这段代码将每个字符串转换为一个整数,由内存中的字节序列表示,找到这两个整数的中点,并尝试再次将“中点”字节解释为 UTF-8。
根据您想要的行为,下一步可能是用某种替换字符替换 midpoint_bytes
中的无效字节,以形成有效的 UTF-8 字符串。对于您的问题,只要您保持一致,使用哪个字符进行替换可能并不重要。
但是,由于您正在尝试对数据进行分区并且似乎不太关心中点的字符串表示形式,因此另一种选择是将中点表示形式保留为整数并将键转换为整数,同时做分区。根据您的问题的规模,此选项可能可行也可能不可行。
关于python - 获取其他两个字符串之间的中点字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752035/
我需要你的帮助!我在它们之间放置了随机数量的 div。 Item description Item description Item description Item
我有两个 NSDates,时间格式为“h:mm a”(即 6:00 AM 和 8:00 PM)。 我试图找出这两个时间之间的中点是什么时间。 对于上面的示例,早上 6:00 和晚上 8:00 之间的中
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我正在寻找一种有效的算法来检查一个点是否在 3D 中的另一个点附近。 sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2) < radius 这似乎并不太快,实际上我不需要这
我可以让 pandas cut/qcut 函数返回 bin 端点或 bin 中点而不是一串 bin 标签吗? 目前 pd.cut(pd.Series(np.arange(11)), bins = 5)
我是一名优秀的程序员,十分优秀!