查找最优解

业务场景需求:求解最优rto、rpo指标,即找出rpo和rto均最小的一组值。

list_result = []
list1 = [{"rto":1,"rpo":7},
        {"rto":2,"rpo":5},
        {"rto":2,"rpo":10},
        {"rto":3,"rpo":4},
        {"rto":3,"rpo":10},
        {"rto":4,"rpo":11}]
while True:
   """
   因为最小值可能不止一组,因此考虑删最大值比较方便
   分别对rto、rpo排序,每次循环会删除最大的一组值,直到不存在最大值时跳出循环
   """

	# rto相同的按rpo排序    
	# 也可以用这种方式排序,需要用到这个类from operator import itemgetter 
	# sorted(list1, key=itemgetter("rto","rpo"))
    sorted_rto = sorted(list1, key=lambda x: (x["rto"],x["rpo"]))
    sorted_rpo = sorted(list1, key=lambda x: (x["rpo"],x["rto"]))
    # 如果列表只有一个元素不能删除
    if sorted_rpo[-1] == sorted_rto[-1] and len(list1) >1:
        list1.remove(sorted_rto[-1])
    else:
        break
    # 区别于append追加,extend用于列表扩展,即将list1的值添加到list_result中
    list_result.extend(list1)
   

直接上图说明,排序后:
第一次循环会删除(4,11),第二次删除(3,10)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值