Python 3.x 如何在二进制表示中翻转位模式?

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 实际上,在

我有一个像这样的字符串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

实际上,在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,这将给出错误的答案,因为前导零触发检测。您需要在字符串转换或创建掩码时过滤掉这些内容。