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

为什么我用numpy实现的Merge合并函数返回异常结果?

问题解答

核心问题

你的代码错误来自两处逻辑缺失:

  • 现有的while循环仅在左右两个数组都还有未遍历元素时才执行写入操作,当其中一个数组遍历完成后,另一个数组剩余的元素没有被写入结果数组。你给出的调用案例中,右侧数组[1,2,3]遍历完成后循环直接终止,左侧的5,6,9完全没有被写入结果。
  • 你使用np.empty()初始化数组时,仅分配了对应长度的内存空间,不会自动填充默认值,未写入的位置会保留内存中的原始垃圾值,就是你返回结果里后三位的奇怪数字。

修复方案

在循环结束后、返回结果前,增加剩余元素的写入逻辑即可,修复后完整代码如下:

import numpy as np

def Merge(leftlist, rightlist):
    len1 = len(leftlist)
    len2 = len(rightlist)
    lfirst = 0
    rfirst = 0
    merge  = 0
    newlist = np.empty(len1 + len2, dtype = int)
    while lfirst < len1 and rfirst < len2:
        if leftlist[lfirst] < rightlist[rfirst]:
            newlist[merge] = leftlist[lfirst]
            lfirst += 1
            merge += 1
        else:
            newlist[merge] = rightlist[rfirst]
            rfirst += 1
            merge += 1 
    # 写入左侧数组剩余元素
    newlist[merge:merge + len1 - lfirst] = leftlist[lfirst:]
    merge += len1 - lfirst
    # 写入右侧数组剩余元素
    newlist[merge:] = rightlist[rfirst:]
    return newlist

调用Merge(np.array([5,6,9]), np.array([1,2,3]))即可返回预期结果array([1, 2, 3, 5, 6, 9])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:24:05