八进制转十进制时用np.array_split拆分不等长数组是否过于复杂?
八进制转十进制的代码优化方案
原代码的问题根源在于:将所有八进制数的每一位计算结果存入同一个全局列表,再用np.array_split拆分,当输入的八进制数长度不同时,拆分逻辑会出错(拆分是按元素总数均分,而非按每个数的位数分界)。
直接采用逐个处理每个输入的八进制字符串的思路即可解决问题,逻辑更简洁可靠,无需依赖数组拆分操作。
方法一:利用Python内置函数(最简洁)
Python的int()函数支持直接指定进制转换,第二个参数传入8即可将八进制字符串转为十进制整数:
def decode(code): octal_nums = code.split() decimal_nums = [str(int(num, 8)) for num in octal_nums] return " ".join(decimal_nums)
测试示例:
- 输入
"23 240 1",输出"19 160 1",完全符合预期。
方法二:手动实现进制转换逻辑(保留原思路但优化)
如果不想依赖内置函数,可对每个八进制字符串单独计算,避免全局列表拆分的问题:
def decode(code): octal_nums = code.split() decimal_nums = [] for num in octal_nums: total = 0 length = len(num) for idx, digit in enumerate(num): # 计算当前位的权重:8的(长度-1-索引)次方 weight = 8 ** (length - 1 - idx) total += int(digit) * weight decimal_nums.append(str(total)) return " ".join(decimal_nums)
此逻辑中每个八进制数的计算完全独立,不会受其他数长度的影响,彻底解决了原代码的拆分错误问题。
内容的提问来源于stack exchange,提问作者Ed Masters
相关产品推荐
相关产品推荐

