我正在开发一个项目,需要反转二进制字符串(即,将 0 更改为 1,将 1 更改为 0)。例如,如果输入是“0110010”,则输出应该是“1001101”。
出于性能原因,我正在寻找一种不使用 Python 循环(例如 for 或 while)的解决方案。我尝试过使用列表理解,但我想知道是否有更有效的方法来做到这一点。
这是我迄今为止尝试过的:
s = "0110010"
s = "".join('1' if bit == '0' else '0' for bit in s)
print(s)
Python 有没有更有效的方法来解决这个问题?
使用交换的简单方法:
st = "0110010"
st=st.replace("0","a")
st=st.replace("1","0")
st=st.replace("a","1")
print (st)
很简单,使用按位运算符。这是正确的方法,因为了解如何在 Python 中使用这些运算符很有用。如果这是一项任务,那么这似乎是设置任务的人希望完成的方式。
# Make binary literal (0b prefix)
b = 0b11001001
# And use the complement operator
print(~b)
#Or if you want to print out the binary, try
print(bin(~b))
以下是一些示例:
>>> ~0b110011
-52
>>> bin(~0b110001)
'-0b110010'
>>> bin(~0b11000)
'-0b11001'
如果你的二进制数是一个字符串:
s = "101"
# bin(~int(s,2)) = "010"
注意,如果您想要只是二进制字符,您可能需要修剪掉空格中的前三个字符,例如
bin(~int(s,2))[3:]
''.join('1' if x == '0' else '0' for x in '0110010')
这段代码适用于字符串,尝试一下:
>>> from string import maketrans
>>>
>>> initial_string = "10101010100011010"
>>> converted_string = initial_string.translate(maketrans("10","01"))
>>> converted_string # The result is
'01010101011100101'
>>>