两组词的比较

2024-05-28 20:24:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想比较两个列表(结果、基本事实)。如果两者都匹配,则输出应包含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.]

Tags: 代码lentvccprintcccdiseaseu1
3条回答

如果您正在运行python3,可以尝试:

def comparedkeground(dke, grd):
    return [int(i in grd) for i in dke]

这是因为当元素不在主列表中时,循环中会发生错误,从而停止当前for循环的执行,但数组的其余部分尚未检查, 所以,不如像这样把你的try catch块往里移一点

import numpy as np
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

u=['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块移到了里面,因为如果找不到当前元素,那么应该在列表中搜索下一个元素,这样循环就应该出现在下一次迭代中,所以出现的任何错误都应该在迭代本身中处理。你知道吗

这是因为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

相关问题 更多 >

    热门问题