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

新手上路,请多包涵

我试图以字符串形式获取二进制数并翻转 1 和 0,即将字符串中的所有 1 更改为 0,并将所有 0 更改为 1。我是 Python 的新手,现在已经绞尽脑汁想弄明白几个小时了。

原文由 Just a Student 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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 组合是要走的路。紧随其后的是领悟。我的代码是最慢的,差距很大。

原文由 Xorlev 发布,翻译遵循 CC BY-SA 2.5 许可协议

>>> ''.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' 0 简单 - 它为我们提供了 1 x 我们对原始字符集中的每个这样的 x 执行此操作,然后 join() 它们全部在一起(带有一个空字符串 '' ,也就是什么都没有,介于两者之间每个项目),从而给我们一个最终的字符串,它是所有与原始相反的字符的组合。

原文由 Amber 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏