You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现两个二进制列表的所有有效子二进制数两两相乘?

解决二进制列表有效数两两相乘的问题

你的原代码有两个核心问题:

  • 直接调用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. 先遍历每个列表的起始索引,只保留以1开头的子列表(这才是有效二进制数),转成十进制后存储到列表中
  2. 再用嵌套循环遍历两个十进制数列表,完成所有有效组合的相乘,既不会修改原始列表,也能准确覆盖你需要的所有运算场景

内容的提问来源于stack exchange,提问作者ProvoloneCheese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:01:03