Python 3.x 如何在二进制表示中翻转位模式?
我有一个像这样的字符串BGGBG。现在我必须将所有BG翻转为GB。在这个字符串中有两个BG。现在如果我想将它表示为二进制(取B=0和G=1),那么它将是01101。因此,我们要从01切换到10。这可能吗?如果是,如何在Python中执行 供参考:这不是只是翻转位(0到1,反之亦然)。而是翻转模式(如本例中的01) 我知道我可以这样使用str.replace():Python 3.x 如何在二进制表示中翻转位模式?,python-3.x,bit-manipulation,Python 3.x,Bit Manipulation,我有一个像这样的字符串BGGBG。现在我必须将所有BG翻转为GB。在这个字符串中有两个BG。现在如果我想将它表示为二进制(取B=0和G=1),那么它将是01101。因此,我们要从01切换到10。这可能吗?如果是,如何在Python中执行 供参考:这不是只是翻转位(0到1,反之亦然)。而是翻转模式(如本例中的01) 我知道我可以这样使用str.replace(): string=string.replace("BG","GB") # will replace all BG to GB 实际上,在
string=string.replace("BG","GB") # will replace all BG to GB
实际上,在codeforces,这是解决这个问题的一个不错的方法 我不是说这是最好的、最可持续的、甚至是可以接受的方法,但写这篇文章确实很有趣。我希望它能使您更接近于解决您试图解决的问题:
重新导入
#我假设字符串是“((BG)*(GB)*)*”
#任何其他字符都会导致此失败
输入='BGGBGB'
输出=“”
对于有关findall(“..”)的两个输入:
输出+=int.to_字节(int.from_字节(两个.encode(),'big')^1285,2,'big')。解码('ascii'))
打印(输入)
打印(输出)
如果二进制字符串位于bg
:这将仅在bg
具有01
的位置将掩码设置为1。1在翻转中加倍,并与原始值进行XORd以获得结果:
>>> bg = 0b00011011
>>> mask = bg & (~bg>>1)
>>> flip = mask|mask<<1
>>> result = bg ^ flip
>>> bin(result)
'0b00101101'
bg=0b00011011
>>>掩码=bg&(~bg>>1)
>>>翻转=遮罩|遮罩>结果=背景^flip
>>>垃圾箱(结果)
'0b00101101'
谢谢lot@Dodekeract. 我已经试过你的代码,但似乎它会触发一些字符。你能更精确地@AminAhmed吗?请注意,如果第一个字符是“G”=1,这将给出错误的答案,因为前导零触发检测。您需要在字符串转换或创建掩码时过滤掉这些内容。