我想找到一种使用python反转字符串中每个字符的位的方法。
例如,如果我的第一个字符为J
,则为ASCII 0x4a
或0b01001010
,因此将其反转为0x52
或0b01010010
。如果我的第二个字符是K
,则该字符是0b01001011
,因此将其反转为0xd2
或0b11010010
,等等。
最终结果应以string
的形式返回。
在这里,速度是我的第一要务,所以我正在寻找一种快速的方法来实现这一目标。
答案 0 :(得分:3)
如果速度是您的目标,并且您正在使用ASCII,因此只有256个8位值需要处理,请事先计算反转字节的值并将其放入bytearray
中,然后通过索引查找它们进入bytearray
。
答案 1 :(得分:1)
采纳建议后,这是我的解决方案:
# Pre-populate a look-up array with bit-reversed integers from 0 to 255
bytearray = []
for i in range(0, 256):
bytearray.append(int('{:08b}'.format(i)[::-1], 2))
# Reverses the bits of each character in the input string and returns the result
# as a string
def revstr(string):
return ''.join([chr(bytearray[ord(a)]) for a in list(string)])
print "JK".encode("hex") # 0x4a4b
print revstr("JK").encode("hex") # 0x52d2
答案 2 :(得分:0)
a=bin(ord("a"))
'0b'+a[::-1][0:len(a)-2]
如果要处理很多字符,则只有256个ascii字符。将反向的字符串存储在哈希图中,并在哈希图中进行查找。这些查询的时间复杂度为O(1),但设置时间固定。