在列表元组中成对添加元素

我有两个元组列表


[[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 itertools


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


神不在的星期二
浏览 90回答 1
1回答

隔江千里

以下是更简洁和线性的组合数量:from itertools import productdef optimalUtilization(n, l1, l2):&nbsp; &nbsp; # all (index1, index2, sum) triplets where sum is at most n&nbsp; &nbsp; res = [(a[0], b[0], a[1]+b[1]) for a, b in product(l1, l2) if a[1]+b[1] <= n]&nbsp; &nbsp; m = max(res, key=lambda x: x[2])[2]&nbsp; # max sum <= n&nbsp; &nbsp; 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,肯定是有争议的 :)更新:不再需要排序和分组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python