将单词表示为位序列

时间:2017-06-28 21:40:17

标签: python

我想将一个单词表示为26位的序列。如果设置了第25位,则表示该单词中存在字母“y”。

例如:word:“abekz”              表示:10000000000000010000010011 这在C / C ++中很容易实现,因为它具有32位int类型。但是Python的int具有无限的精度,所以我无法做到。

这是我的(错误)解决方案:

def representAsBits(string):
  mask=0
  for each_char in string:
    bit_position= ord(each_char)-97 #string consists of only lower-case letters
    mask= mask | (1<<bit_position)
  return bin(mask)

print representAsBits("abze")# gives me 0b10000000000000000000010011
print representAsBits("wxcc")# gives me 0b110000000000000000000100  2 bits missing here

我可以做出哪些改变?谢谢!

1 个答案:

答案 0 :(得分:1)

您不能在整数上存储前导零。谢天谢地,您正在使用bin(),它会返回一个字符串。

通过一些创意切片,我们可以根据需要对其进行格式化:

return "0b%32d" % int(bin(mask)[2:])

会给:

>>> representAsBits("abekz")
'0b00000010000000000000010000010011'

话虽这么说,为了比较面具,你不必bin()他们,除非你想&#34;显示&#34;二进制。比较整数本身,这将是相同的:

return mask

>>> representAsBits("z") == representAsBits("zzz")
True

虽然,由于蒙版会匹配,但与您使用的填充无关,因为如果从同一蒙版生成它们将是相同的:任何只包含字符的字符串{无论您使用何种方法,{1}}都会产生相同的字符串。