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

如何将JavaScript中含.reduce的二进制转十进制函数转为Python实现?

把JavaScript的bin2dec转换为Python代码

先理清原JavaScript代码的逻辑

原JS代码的核心是用.reduce计算二进制转十进制的结果,步骤拆解:

  1. num.split(''):把二进制字符串拆成单个字符的数组(比如"101"变成["1","0","1"])
  2. .reverse():反转数组,让原二进制的最低位(最右边)对应索引0
  3. .reduce(...):从初始值0开始遍历反转后的数组:
    • 累计值x记录当前总和
    • y是当前遍历的字符,i是它的索引
    • 如果y是'1',就把2^i加到x上;否则x保持不变

你的Python代码的问题

  1. map(int, listNum)在Python3中返回迭代器,不能直接用listNum[-1],需要先转成列表:listNum = list(map(int, listNum))
  2. 初始值x = listNum[-1]错误,应该和JS一样从0开始累计
  3. 循环里2**listNum[i]逻辑错误,应该是2**i(索引i对应二进制位的权重,listNum[i]只是用来判断要不要加这个权重)

正确的Python实现

方法1:用functools.reduce(对应JS的.reduce)

需要导入functools模块,逻辑和JS完全对应:

from functools import reduce

def bin2dec(num):
    def reducer(acc, current):
        index, char = current
        return acc + (2 ** index if char == '1' else 0)
    return reduce(reducer, enumerate(reversed(num)), 0)

方法2:用普通循环(新手更易理解)

直接模拟.reduce的累计逻辑,不用依赖额外模块:

def bin2dec(num):
    total = 0
    # 反转字符串,遍历每个字符并获取其索引
    for i, char in enumerate(reversed(num)):
        if char == '1':
            total += 2 ** i
    return total

测试验证

运行以下代码验证结果:

print(bin2dec("101"))  # 输出5
print(bin2dec("110"))  # 输出6
print(bin2dec("1001")) # 输出9

偷懒的Python内置方法

如果不需要手动实现逻辑,Python内置的int函数直接支持二进制转十进制:

def bin2dec(num):
    return int(num, 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:06:28