Python:使用Joblib完成嵌套循环任务,并解决返回None值问题

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]]

好了,我要去打游戏了!! 😃

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值