Python - 字符串中翻转二进制1和0

10 投票
10 回答
45007 浏览
提问于 2025-04-16 05:24

我想把一个以字符串形式表示的二进制数字中的1和0反转,也就是说,把字符串里的所有1都变成0,把所有0都变成1。我刚学Python,已经绞尽脑汁好几个小时了,还是搞不定这个问题。

10 个回答

15

另一种方法是使用 string.translate()string.maketrans()

from string import maketrans
bitString = "10101010100011010"
flippedString = bitString.translate(maketrans("10","01"))
33
>>> ''.join('1' if x == '0' else '0' for x in '1000110')
'0111001'

a for b in c 这种写法叫做 生成器表达式,它可以根据一个系列生成一系列新的项目。在这个例子中,原始的系列是字符串中的字符(因为在Python中,你可以遍历字符串,这样就能得到组成这个字符串的每个字符),而新的系列则是将字符中的0和1翻转过来的结果。

'1' if x == '0' else '0' 这个表达式很简单——它会根据 x 的值返回 10 中的另一个。我们对原始字符中的每个 x 都这样做,然后用 join() 方法把它们都连接起来(中间用一个空字符串 '',也就是没有东西),最终得到一个新的字符串,里面的字符都是原始字符的反转结果。

6

Amber的回答虽然很好,但可能不够清晰,所以这里给出一个超级简单的迭代示例:

b_string = "1100101"
ib_string = ""

for bit in b_string:
  if bit == "1":
    ib_string += "0"
  else:
    ib_string += "1"

print ib_string

其实可以用更好的方法来实现,比如替换、列表推导等,但这只是一个示例。

在你理解了这个基础之后,可以看看这个问题下的其他回答。我这个方法比较慢,使用起来也不太方便。为了获得最佳的性能,正如Muhammad Alkarouri所提到的,使用string.translatemaketrans的组合是最好的选择。紧随其后的是列表推导。我写的代码在速度上明显是最慢的。

撰写回答