HackerRank问题:如何用Lambda函数或单行循环实现二进制位翻转
解决整数32位二进制位翻转问题
你的代码语法问题分析
你之前的写法存在两个核心语法错误:
- Lambda表达式中不能使用赋值语句(
x = '1'这种写法不合法),Lambda需要直接返回表达式结果。 - 列表推导式里只能写表达式,不能写赋值操作,且你第二次写法里错误地遍历了整数
n而非转换后的字符串g。
正确的单行实现方式
方式1:纯列表推导式(最简洁)
直接遍历32位二进制字符串的每个字符,用三元表达式生成翻转后的字符列表:
g = '{0:032b}'.format(n) res = ['1' if c == '0' else '0' for c in g] # 若需要拼接成完整字符串,执行以下步骤 res_str = ''.join(res)
方式2:结合Lambda与Map
用Lambda定义翻转逻辑,再通过map函数批量处理字符串中的每个字符:
g = '{0:032b}'.format(n) res = list(map(lambda c: '1' if c == '0' else '0', g)) res_str = ''.join(res)
更高效的位运算实现(无需字符串转换)
其实不需要转成二进制字符串,直接用位运算异或就能完成32位翻转,这是性能更优的方案:
32位全1的整数可以用0xFFFFFFFF(或(1 << 32) - 1)表示,将原整数与它做异或运算,每一位0会变成1,1会变成0:
flipped_n = n ^ 0xFFFFFFFF # 若需要转成32位二进制字符串验证 flipped_str = '{0:032b}'.format(flipped_n)
这种方法跳过了字符串转换的开销,直接操作底层二进制位,执行效率更高。
内容的提问来源于stack exchange,提问作者NK Rao
相关产品推荐
相关产品推荐

