将单词表示为位序列

  • 本文关键字:单词 表示 python
  • 更新时间 :
  • 英文 :


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

例如:单词:"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

我可以进行哪些更改?谢谢!

不能在整数上存储前导零。值得庆幸的是,您使用的是 bin() ,它返回一个字符串。

通过一些创造性的切片,我们可以随心所欲地格式化它:

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

将给予:

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

话虽如此,要比较掩码,您不必bin()它们,除非您想"显示"二进制文件。比较整数本身,这将是相同的:

return mask

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

虽然,由于掩码将匹配,因此使用什么填充并不重要,因为如果从同一掩码生成,它们将是相同的:任何仅包含字符的字符串都将生成相同的字符串wxc无论您使用哪种方法。

最新更新