代码之家  ›  专栏  ›  技术社区  ›  Rohit

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

  •  -2
  • Rohit  · 技术社区  · 6 年前

    我有两个元组列表

    [[1,3000],[2,5000],[3,7000],[4,10000]]
    [[1,2000],[2,3000],[3,4000],[4,5000]] 
    

    总数是一万。这里我们有[25000],[45000]和[37000],[23000],所以输出应该是 [2,4] [3,2]

    [[1,2000],[2,4000],[3,6000]]
    [[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
    

    有没有更好的蟒蛇方法?

    驱动程序代码

    print(optimalUtilization(20,
                    [[1,8],[2,7],[3,14]],
                    [[1,5],[2,10],[3,14]]))
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   user2390182    6 年前

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

    无论是更具可读性还是更具python风格,都值得商榷:)

    更新: 不需要更多的排序和分组。