如何实现两个二进制列表的所有有效子二进制数两两相乘?
解决二进制列表有效数两两相乘的问题
你的原代码有两个核心问题:
- 直接调用
pop(0)会修改原始列表,导致后续循环的列表不符合预期,还会把0开头的无效二进制数算进来(比如[1,0,1,1]pop一次后变成[0,1,1],但例子里并没有这个数的运算) - 每次循环取的是整个当前列表,不是你需要的「从某个起始点开始的有效子列表」
下面是修正后的代码,完全符合你的需求:
首先写一个辅助函数,用来把二进制列表转换成十进制整数:
def bin_list_to_dec(lst): return int(''.join(map(str, lst)), 2)
然后是主函数,生成所有有效二进制数并完成两两相乘:
def multRes(a, b): # 生成列表a的所有有效二进制数(以1开头的子列表)对应的十进制值 nums_a = [] for start in range(len(a)): if a[start] == 1: nums_a.append(bin_list_to_dec(a[start:])) # 生成列表b的所有有效二进制数对应的十进制值 nums_b = [] for start in range(len(b)): if b[start] == 1: nums_b.append(bin_list_to_dec(b[start:])) # 遍历所有组合并打印乘积 for num_a in nums_a: for num_b in nums_b: print(num_a * num_b)
测试验证
调用multRes([1,0,1,1], [1,1,0,1]),会输出以下结果:
143 55 11 39 15 3 13 5 1
完全对应你例子里的9次运算结果(1011=11,1101=13,101=5,11=3,1=1,两两相乘的结果就是上面的数值)。
逻辑说明
- 先遍历每个列表的起始索引,只保留以1开头的子列表(这才是有效二进制数),转成十进制后存储到列表中
- 再用嵌套循环遍历两个十进制数列表,完成所有有效组合的相乘,既不会修改原始列表,也能准确覆盖你需要的所有运算场景
内容的提问来源于stack exchange,提问作者ProvoloneCheese
相关产品推荐
相关产品推荐

