如何在Python3中逐个翻转二进制数的单一位(0变1、1变0)?
二进制位逐个翻转的正确实现方法
问题分析
核心问题是每次翻转后未基于原始二进制串操作,而是在修改后的结果上继续翻转,导致首位被修改后后续操作都基于错误的基础值,最终输出不符合预期。
正确实现代码
binary = "1010" # 遍历每一位的索引 for i in range(len(binary)): # 每次从原始字符串生成新列表,避免之前的修改影响后续操作 bits = list(binary) # 翻转当前位:0变1,1变0 bits[i] = '1' if bits[i] == '0' else '0' # 转换为字符串并输出 print(''.join(bits))
输出结果
0010 1110 1000 1011
错误原因说明
你之前的代码大概率复用了同一个列表,示例如下:
# 错误示例(导致你得到的输出) binary = "1010" bits = list(binary) for i in range(len(bits)): bits[i] = '1' if bits[i] == '0' else '0' print(''.join(bits)) # 未将bits恢复为原始状态
这种写法中,第一次翻转第一位后列表变为['0','0','1','0'],第二次翻转第二位时是在这个修改后的列表上操作,得到['0','1','1','0'],后续操作也基于前一次结果,自然无法得到正确输出。
内容的提问来源于stack exchange,提问作者Emily Thompson
相关产品推荐
相关产品推荐

