Python - 字符串中翻转二进制1和0
我想把一个以字符串形式表示的二进制数字中的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
的值返回 1
或 0
中的另一个。我们对原始字符中的每个 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.translate
和maketrans
的组合是最好的选择。紧随其后的是列表推导。我写的代码在速度上明显是最慢的。