python – 按两个最佳组合排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 按两个最佳组合排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1640字,纯文字阅读大概需要3分钟。
内容图文
我有“产品”列表,其中每个人都有两个功能,例如:书籍的价格和评级,或门票的时间和价格等
书籍(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 – 按两个最佳组合排序全部内容,希望文章能够帮你解决python – 按两个最佳组合排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。