Сравнение двух списков слов - PullRequest
0 голосов
/ 12 октября 2019

Я хочу сравнить два списка (результат, основание-правда). Вывод должен содержать 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.]

Ответы [ 3 ]

1 голос
/ 12 октября 2019

Это связано с тем, что массив 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
1 голос
/ 12 октября 2019

Если вы используете Python3, попробуйте:

def comparedkeground(dke, grd):
    return [int(i in grd) for i in dke]
0 голосов
/ 12 октября 2019

Это потому, что когда элемент не существует в вашем основном списке, в цикле возникает ошибка, которая останавливает выполнение текущего цикла 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 внутрь, потому что если текущий элемент не найден, то следующий элемент должен быть найден в списке, поэтому цикл должен присутствовать для следующей итерации, поэтому любые ошибки, которые там есть, должны обрабатываться в самой итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...