亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在列表元組中成對添加元素

在列表元組中成對添加元素

神不在的星期二 2021-06-09 15:50:13
我有兩個元組列表[[1,3000],[2,5000],[3,7000],[4,10000]][[1,2000],[2,3000],[3,4000],[4,5000]] 總和是 10000。這里我們有 [2,5000],[4,5000] 和 [3,7000],[2,3000] 所以輸出應該是[2,4]和[3,2][[1,2000],[2,4000],[3,6000]][[1,2000]]總和是 7000。這里因為我沒有總和為 7000 的組合,我考慮了所有可能的組合 4000(2000+2000),6000(4000+2000) 和 8000(6000+2000) 并考慮從所需的總和為 6000 。對于 6000,我的輸出應該是 [2,4000] 和 [1,2000],即[2,1]這是我的代碼import itertoolsdef optimalUtilization(maximumOperatingTravelDistance,                       forwardShippingRouteList, returnShippingRouteList):    result=[]    t1=[]    t2=[]    for miles in forwardShippingRouteList:        t1.append(miles[1])    for miles in returnShippingRouteList:        t2.append(miles[1])    result.append(t1)    result.append(t2)    total_sum=set()    for element in list(itertools.product(*result)):        if sum(element)<=maximumOperatingTravelDistance:            total_sum.add(sum(element))    total_sum=sorted(total_sum,reverse=True)    return optimalUtilizationhelper(total_sum[0],                       forwardShippingRouteList, returnShippingRouteList)def optimalUtilizationhelper(maximumOperatingTravelDistance,                       forwardShippingRouteList, returnShippingRouteList):    dist_dict={}    for carid,miles in forwardShippingRouteList:        dist_dict.update({miles:carid})    result=[]    for carid,miles in returnShippingRouteList:        if (maximumOperatingTravelDistance-miles) in dist_dict:            result.append(list((dist_dict[maximumOperatingTravelDistance-miles],carid)))    return result有沒有更好的pythonic方法來做到這一點?驅動程序代碼print(optimalUtilization(20,                [[1,8],[2,7],[3,14]],                [[1,5],[2,10],[3,14]]))
查看完整描述

1 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

以下是更簡潔和線性的組合數量:


from itertools import product


def optimalUtilization(n, l1, l2):

    # all (index1, index2, sum) triplets where sum is at most n

    res = [(a[0], b[0], a[1]+b[1]) for a, b in product(l1, l2) if a[1]+b[1] <= n]

    m = max(res, key=lambda x: x[2])[2]  # max sum <= n

    return [x[:2] for x in res if x[2] == m]


>>> optimalUtilization(20, [[1,8],[2,7],[3,14]], [[1,5],[2,10],[3,14]])

[(3, 1)]

無論是更易讀還是更 Pythonic,肯定是有爭議的 :)


更新:不再需要排序和分組。


查看完整回答
反對 回復 2021-06-15
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號