我想比较两个列表(结果、基本事实)。如果两者都匹配,则输出应包含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.]
如果您正在运行python3,可以尝试:
这是因为当元素不在主列表中时,循环中会发生错误,从而停止当前for循环的执行,但数组的其余部分尚未检查, 所以,不如像这样把你的
try catch
块往里移一点输出
我把try块移到了里面,因为如果找不到当前元素,那么应该在列表中搜索下一个元素,这样循环就应该出现在下一次迭代中,所以出现的任何错误都应该在迭代本身中处理。你知道吗
这是因为
u
数组没有'drugs'
值,dke.index(grd[i])
的输出将是一个错误!如果将try
语句放错了位置,则必须这样更改它:相关问题 更多 >
编程相关推荐