3 回答

TA貢獻1744條經驗 獲得超4個贊
這是因為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

TA貢獻1993條經驗 獲得超6個贊
如果您正在運行 python3,請嘗試:
def comparedkeground(dke, grd): return [int(i in grd) for i in dke]

TA貢獻1851條經驗 獲得超3個贊
這是因為當您的主列表中不存在該元素時,循環中會發生錯誤,該錯誤會停止當前 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 塊移到內部,因為如果找不到當前元素,則應在列表中搜索下一個元素,因此下一次迭代應該存在循環,因此應該在迭代本身中處理任何錯誤。
添加回答
舉報