为什么我的 Merge 函数给出奇怪的答案?

Why is my Merge function giving weird answers?

我刚刚使用 numpy 数组创建了一个简单的合并函数。代码如下,应该还算可以 很简单,我是不是没有正确实现数组?

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 
    
    return newlist

当我使用 Merge([5,6,9],[1,2,3]) 时,它 returns:

数组([ 1, 2, 3, 173670400, 1667330163, 1701601125]),

而不是数组 ([1,2,3,5,6,9])。不知道有什么问题。

编辑:我应该提一下,在这种情况下,leftlist 和 rightlist 参数也是 numpy 数组。

当您 运行 Merge([5,6,9],[1,2,3]) 时,lfirst 保持为 0,因此 leftlist 永远不会读取超出第一个元素的内容(while 循环永远不会说明要做什么具有更大价值的列表)。您看到的随机元素是因为您首先创建了一个空数组。如果你 运行 Merge([5,6,9],[1,2,3]) 一次又一次,最后 3 个元素每次都会改变。

我编辑了您的函数以找到您想要的结果(N.B。仅当每个传递的列表已经排序时才排序):

def Merge(left, right):
    leftlist, rightlist = [list(left), list(right)]
    comparisons = 0
    newlist = []
    
    while leftlist or rightlist:
        try:
            x = leftlist.pop(0) if leftlist[0] < rightlist[0] else rightlist.pop(0)
        except:
            x = leftlist.pop(0) if leftlist else rightlist.pop(0)
        newlist.append(x)
        comparisons += 1
                
    return np.array(newlist), comparisons

输出:

Merge([5,6,9],[1,2,3]) # (array([1, 2, 3, 5, 6, 9]), 6)

所以这里有6个比较。