python重新组织代码

时间:2010-08-14 16:31:59

标签: python refactoring

抱歉,我不知道如何添加格式的评论,所以我在这里发布了另一个带代码的问题,因为我是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

对于上面的代码,不应该是最好的部分,可能的任何改进?谢谢:))

2 个答案:

答案 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