1.任务:
arr1=[1,2,3,4,5]
arr2 =[[10,5], [20,3], [32,3], [40,4], [51,5]]
根据arr1数组中的数值和arr2二维数组(定义arr2二维数组各项为[[a1,b1][a2,b2]…])中b项的对应关系,分类提取arr2二维数组中的a项,希望得到的结果如下:
[[10,51],[20,32],[40]]
2.完整代码:
from joblib import Parallel, delayed
def jobj(i,arr2):
m=Parallel(n_jobs=-1)(delayed(jobj2)(j,i) for j in arr2)
mz=list(filter(None,m))#由于delayed会返回None值,所以这里用filter过滤掉
return mz
def jobj2(j,i):
if i==j[1]:
return j[0]
if __name__ == "__main__":
arr1 = [1, 2, 3, 4, 5]
arr2 = [[10,5], [20,3], [32,3], [40,4], [51,5]]
res_t=Parallel(n_jobs=-1)(delayed(jobj)(i,arr2) for i in arr1)
res=[t for t in res_t if t!=[]] #这一步去掉[]空值
print(res)
输出结果:
[[20, 32], [40], [10, 51]]
3.解决返回None值的问题(delayed中的判断函数返回为空时,默认返回None)
mz=list(filter(None,m))
res=[t for t in res_t if t!=[]]
通过上述两行代码消除delayed返回的None值(delayed中的函数为判断函数时,如果else没有结果,会默认返回None)。如果上述两行代码没有,则结果如下:
[[None, None, None, None, None], [None, None, None, None, None], [None, 20, 32, None, None], [None, None, None, 40, None], [10, None, None, None, 51]]