所以我想知道是否有二进制字符串,例如:
01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001
(你好妈妈!)
可以通过 所有 1
变成{3}中的0
和副verca的方式来反转。
答案 0 :(得分:2)
您可以拆分二进制字符串并使用按位操作,例如:
In []:
x = '01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001'
r = [format(int(n, 2) ^ 0xff, 'b') for n in x.split()]
r
Out[]:
['10110111', '10011010', '10010011', '10010011', '10010000',
'11011111', '10110010', '10010000', '10010010', '11011110']
这很简单,可以加入这个:
In []:
' '.join(r)
Out[]:
'10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110'
答案 1 :(得分:2)
您可以使用与生成器的连接,并将'1'
替换为'0'
,反之亦然,同时保持任何两个字符(示例中的空格)不变:
string = "01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001"
reverse = ''.join('0' if c=='1' else ('1' if c=='0' else c) for c in string)
print(reverse)
输出:
10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110
如@AChampion评论,您可以使用以下方法缩短和改进上述代码:
string = "01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001"
reverse = ''.join('10'[int(c)] if c in '01' else c for c in string)
print(reverse)
答案 2 :(得分:2)
str.translate()
对此非常有用且高效:
bits = '01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001'
table = {ord('0'): '1', ord('1'): '0'} # '0' -> '1', '1' -> '0'
inverted_bits = bits.translate(table)
print(inverted_bits)
输出:
10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110
如果您想应用其他转换,这也很方便。例如,也可以使用此转换表删除空格:
table = {ord('0'): '1', ord('1'): '0', ord(' '): None}
print(bits.translate(table))
输出:
10110111100110101001001110010011100100001101111110110010100100001001001011011110
另外,使用str.maketrans()
创建转换表:
>>> table = str.maketrans('01', '10')
>>> print(bits.translate(table))
10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110
或
>>> print(bits.translate(str.maketrans('01', '10', ' ')))
10110111100110101001001110010011100100001101111110110010100100001001001011011110
答案 3 :(得分:1)
a="01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001"
a=a.replace('0','a').replace('1','0').replace('a','1')
您可以使用替换功能。
输出:
'10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110'