两个单词列表之间的比较

我想比较两个列表(结果,真实情况)。如果两者都匹配,则输出应包含 1,如果不是“0”并且输出正敏感。例如:


 result= [1,2,3,4,5]

 ground-truth=[2,4]

 Output= [0,1,0,1,0]

我为此实现了python代码:


def comparedkeground(dke,grd):

    correct=np.zeros(len(dke))

    try:

        for i in range(len(grd)):

            a=dke.index(grd[i])

            correct[a]=1

    except:

        'ValueError'

    return correct

此代码在某些情况下给出了完美的结果:例如:


d=[1,2,30,4,6, 8, 50, 90, 121]

e=[30, 2, 50, 90]

print(comparedkeground(d,e))

[0. 1. 1. 0. 0. 0. 1. 1. 0.]


cc=['word', 'flags', 'tv', 'nanjo', 'panjo']

ccc=['panjo', 'tv']

print(comparedkeground(cc,ccc))

[0. 0. 1. 0. 1.]

但相同的代码不起作用:


u=['Lyme-disease vaccine', 'United States', 'Lyme disease', 'Allen Steere']

u1= ['drugs', 'Lyme-disease vaccine', 'Lyme disease']

print(comparedkeground(u,u1))

[0. 0. 0. 0.]


慕容森
浏览 152回答 3
3回答

慕无忌1623718

这是因为u数组没有'drugs'值,输出dke.index(grd[i])会出错!您将try语句放在错误的位置,您必须像这样更改它:def comparedkeground(dke,grd):    correct=np.zeros(len(dke))    for i in range(len(grd)):        try:            a=dke.index(grd[i])            correct[a]=1        except:            'ValueError'    return correct

ibeautiful

如果您正在运行 python3,请尝试:def comparedkeground(dke, grd):     return [int(i in grd) for i in dke]

皈依舞

这是因为当您的主列表中不存在该元素时,循环中会发生错误,该错误会停止当前 for 循环的执行,但尚未检查数组的其余部分,因此请将您的try catch块移动一点这个import numpy as npdef comparedkeground(dke,grd):    correct=np.zeros(len(dke))    for i in range(len(grd)):        try:            a=dke.index(grd[i])            correct[a]=1        except:            'ValueError'    return correctu=['Lyme-disease vaccine', 'United States', 'Lyme disease', 'Allen Steere']u1= ['drugs', 'Lyme-disease vaccine', 'Lyme disease']print(comparedkeground(u,u1))输出[ 1.  0.  1.  0.]我将 try 块移到内部,因为如果找不到当前元素,则应在列表中搜索下一个元素,因此下一次迭代应该存在循环,因此应该在迭代本身中处理任何错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python