如何对列表中的整数元素对执行XOR操作并转换为二进制?
问题解决思路与修正代码
你的代码问题点
- 循环逻辑错误:用
enumerate(test_list)遍历,但完全没用到返回的索引和元素,反而每次循环都对整个列表执行reduce,这会试图让元组之间做XOR运算,完全偏离了“对每个元组内两个数计算”的需求。 - reduce误用:
reduce在这里完全没必要,每个元组只有两个元素,直接取值计算更简单。 - 二进制格式化缺失:没有处理前导零,无法得到示例中8位长度的二进制结果。
修正后的代码(直接对数字做XOR)
如果你的需求是直接对整数对中的两个数字执行XOR,再转成8位二进制:
test_list = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 0), (1, 1)] for pair in test_list: a, b = pair xor_res = a ^ b # 格式化为8位二进制,自动补前导零 binary_str = f"{xor_res:08b}" print(binary_str)
匹配示例的代码(基于ASCII码的XOR)
如果是按照你示例中,先把数字转成对应字符的ASCII码再做XOR(比如十进制0对应字符'0'的ASCII码48,二进制00110000),代码如下:
test_list = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 0), (1, 1)] for pair in test_list: a, b = pair # 将数字转为字符后取ASCII码 ascii_a = ord(str(a)) ascii_b = ord(str(b)) xor_res = ascii_a ^ ascii_b binary_str = f"{xor_res:08b}" print(binary_str)
运行这段代码,(0,2)的结果就是你示例中的00000010。
内容的提问来源于stack exchange,提问作者ΧΡΗΣΤΟΣ ΠΑΠΑΔΟΠΟΥΛΟΣ
相关产品推荐
相关产品推荐

