比较返回错误布尔值的两个函数的输出(列表)

Comparing outputs (list) of two functions returning wrong boolean

我写了两个函数largest_numberlargest_numbercopied和运行一个压力测试来比较它们的结果。这两个函数都输出参数列表的 rear运行ged 版本。但问题是,当我 运行 压力测试时,我看到即使两个输出列表不相同(顺序不同),压力测试也显示正常。尽管我写信只在 largest_number(a) == largest_numbercopied(a) 时才输入 ok。实际上,我之前在其他算法中遇到过这种压力测试功能有点类似的问题,但经过几次试验后这些问题得到了解决,我不知道是什么导致了这个问题。

def maximum(m,n):
    m_=m
    n_=n
    if m<n:
        temp=m
        m=n
        n=temp
    
    if m==n:
        return 1
        
    mlist= []
    for i in range(len(str(m))):
        mlist.append(m//(10**(len(str(m))-1)))
        m= m % (10**(len(str(m))-1))
    
    nlist= []
    for i in range(len(str(n))):
        nlist.append(n//(10**(len(str(n))-1)))
        n= n % (10**(len(str(n))-1))
    
    digitlist= [mlist, nlist]
    
    if digitlist[0][0]==digitlist[1][0]:
        if len(digitlist[1])==1:
            if digitlist[0][1]>= digitlist[0][0]:
                res= 1
            
            else:
                res= 0
        else:
            if digitlist[0][1]==digitlist[1][1]:
                if digitlist[0][2]>=digitlist[0][1]:
                    res= 1
                else:
                    res= 0
            elif digitlist[0][1]>digitlist[1][1]:
                res= 1
            else:
                res= 0
        
    elif digitlist[0][0]>digitlist[1][0]:
        res= 1
    else:
        res= 0
    
    if m_<n_:
        if res==0:
            res=1
        else:
            res=0
    
    return res
def largest_number(a):
    a= sorted(a, reverse=True)
    res=""
    c=0
    while True:
        c=0
        for i in range(len(a)-1):
            if maximum(a[i],a[i+1])==0:
                c+=1
                idx=i
                #print(idx,c)
                break
        if c==0:
            break                
        temp= a[idx]
        a[idx]= a[idx+1]
        a[idx+1]= temp
        #print(a)

    return a

def IsGreaterOrEqual(digit, max_digit):
    return int(str(digit)+str(max_digit))>=int(str(max_digit)+str(digit))

def largest_numbercopied(lst):
    answer = []
    res=""
    while lst!=[]:
        max_digit = 0
        for digit in lst:
            if IsGreaterOrEqual(digit, max_digit):
                max_digit = digit
        answer.append(max_digit)
        lst.remove(max_digit)
    return answer
def stresstest():
    import random
    okcounter=0
    while True:
        n=random.randint(1,100)
        a=[]
        for i in range(n):
            a.append(random.randint(1,1000))
            
        print(f'numbers= {a}, Result1= {largest_number(a)}')
        print(f'numbers= {a}, Result2= {largest_numbercopied(a)}')

        if largest_number(a)== largest_numbercopied(a):
            okcounter= okcounter+1
            print('ok\n')
            if okcounter>=100:
                break

        else: 
            print('Error')
            break
            
stresstest()

largest_numbercopieda 中删除元素,但它对传入的数组而不是它的副本进行操作。这意味着你的行

print(f'numbers= {a}, Result1= {largest_number(a)}')
print(f'numbers= {a}, Result2= {largest_numbercopied(a)}')

将导致 a 被清除,然后

if largest_number(a)== largest_numbercopied(a)

将比较对空列表进行操作的结果。