我有两个元组列表
[[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]]
总数是7000。在这里,由于我没有一个总和为7000的组合,所以我考虑了所有可能的组合4000(2000+2000)、6000(4000+2000)和8000(6000+2000),并考虑期望总和中的下一个最小值,即6000。对于6000,我的输出应该是[24000]和[12000],这是[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
有没有更好的Python方法?你知道吗
驱动程序代码
print(optimalUtilization(20,
[[1,8],[2,7],[3,14]],
[[1,5],[2,10],[3,14]]))
对于组合的数量,以下是更简洁和线性的:
无论是更具可读性还是更具python风格,都值得商榷:)
更新:不再需要排序和分组。你知道吗
相关问题 更多 >
编程相关推荐