python 组合排序_python – 按两个最佳组合排序

我有“产品”列表,其中每个人都有两个功能,例如:书籍的价格和评级,或门票的时间和价格等

书籍(10,15),其中10是以美元计价的价格(越便宜越好),15是从0到100的评级(越多越好).

L = [(150, 100), (50, 15), (20, 70), (10, 40), (76, 30)]

该列表应按价格和评级的最佳组合进行排序.

到目前为止我有2个解决方案,最好的方法是通过乘以价格*(1 /等级)并按这个“重量”排序来找到每对的“重量”,越少越好.

res1 = {}

for i in L:

res1[i] = i[0]*(1./i[1])

# {(10, 40): 0.25, (20, 70): 0.2857, (50, 15): 3.3333, (76, 30): 2.5333, (150, 100): 1.5}

sorted(res1, key=lambda x: res1[x])

# [(10, 40), (20, 70), (150, 100), (76, 30), (50, 15)]

第二种解决方案更复杂,代表性更低.它需要排序两次 – 按价格和评级(评级 – 反转)并试图找到匹配. “权重”将是第一个排序列表中的索引与第二个排序列表中的索引相乘(或求和).

L1 = sorted(L, key=lambda x: x[0])

L2 = sorted(L, key=lambda x: x[1], reverse=True)

res = {}

for i in L:

res[i] = (L1.index(i)+1) * (L2.index(i)+1)

res

# {(10, 40): 3, (20, 70): 4, (50, 15): 15, (76, 30): 16, (150, 100): 5}

sorted(res, key=lambda x: res[x])

# [(10, 40), (20, 70), (150, 100), (50, 15), (76, 30)]

当使用具有大量数据的第二变体时,它显示出较少代表性的结果.

但我厌倦了发明一个轮子,你可以建议哪些数学和算法解决方案?有趣的是,如果这个问题有3个或更多功能的解决方案:价格,供应时间,重量,评级等.

更新:感谢@georgesl指出这一点.我怎么能处理异常值,例如一本非常糟糕的书,但它很便宜?我认为应该以不同的方式对待它们.

解决方法:

为什么你不能那样结合你的答案

L = [(150, 100), (50, 15), (20, 70), (10, 40), (76, 30)]

sorted(L, key=lambda x: x[0] / (x[1] * 1.0))

# [(10, 40), (20, 70), (150, 100), (76, 30), (50, 15)]

附:如果你想得到浮动回答最好的方法乘以1.0数字.它比在浮动中划分或运行你的数字更快

标签:python,algorithm,sorting

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值