Jua*_*oto 6 python sorting unicode floating-point double
尝试从Python中的UTF-8编码字符串对象获取双精度浮点分数.想法是抓住字符串的前8个字节并创建一个float,这样按照得分排序的字符串将根据它们的前8个字节(或者可能是它们的前63位,在强制它们全部被强制执行后)按字典顺序排序.积极的,以避免签署错误).
例如:
get_score(u'aaaaaaa') < get_score(u'aaaaaaab') < get_score(u'zzzzzzzz')
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用bit-shift-left和XOR计算整数得分,但我不确定如何将其转换为float值.我也不确定是否有更好的方法来做到这一点.
如何计算字符串的分数,以满足我之前指定的条件?
编辑:字符串对象是UTF-8编码的(根据@ Bakuriu的提交).
float不会给你 64 位精度。请改用整数。
def get_score(s):
return struct.unpack('>Q', (u'\0\0\0\0\0\0\0\0' + s[:8])[-8:])[0]
Run Code Online (Sandbox Code Playgroud)
在Python 3中:
def get_score(s):
return struct.unpack('>Q', ('\0\0\0\0\0\0\0\0' + s[:8])[-8:].encode('ascii', 'error'))[0]
Run Code Online (Sandbox Code Playgroud)
编辑:
对于floats,有 6 个字符:
def get_score(s):
return struct.unpack('>d', (u'\0\1' + (u'\0\0\0\0\0\0\0\0' + s[:6])[-6:]).encode('ascii', 'error'))[0]
Run Code Online (Sandbox Code Playgroud)