抱歉,我不知道如何添加格式的评论,所以我在这里发布了另一个带代码的问题,因为我是python的新手,似乎有很多更好的方法来重新编写代码以使其更好:
def min_qvalue(self):
s = 0
q = 1
for i in range(len(self.results)):
if self.results[i].score > s:
s = self.results[i].score
q = self.results[i].qvalue
return q
对于上面的代码,不应该是最好的部分,可能的任何改进?谢谢:))
答案 0 :(得分:4)
这是相同的代码:
max_score_qvalue = max( (result.score, result.qvalue) for result in self.results)[1]
它成对得分和q值,找到得分最高的对(max
),然后从中得到q值。
实际上,我写这篇文章的原因只是因为我一直忘记max
也取得了关键作用:
max_score_qvalue = max(self.results, key=(lambda result: result.score)).qvalue
你的函数也是min_qvalue,但是它会计算出一个最高得分!
答案 1 :(得分:1)
如果您的结果列表是可变的并且您经常需要计算它,那么对您heap queue algorithm可能更好。有示例代码:
import heapq
class ResultManager(object):
def __init__( self , results ):
self.results = [( -result.score, result) for result in results]
heapq.heapify( self.results )
def append( self , result ):
heapq.heappush( self.results , ( -result.score, result) )
def getMaxScoreQValue(self):
return self.results[0][1].qvalue