在python中查找最大值

时间:2011-10-08 15:54:47

标签: python for-loop

我正在解决一个问题,我需要使用csv文件中的数据来查找每年影片总数较高的影片。

我已经为每部电影和它出现的那一年制作了'dict'年份,并且对于'粗略'也是如此。 尽管如此,我的代码仍然返回0作为最大总数。我在这里缺少什么?

def MaxGrossFinder(c):

    for film in year:
        MaxGross = 0                        
        f = int(gross[film])                        
        if year[film] == c:
            if f > MaxGross:
                MaxGross = f
    return MaxGross

3 个答案:

答案 0 :(得分:4)

使用max()功能。它正确地执行此操作。

max(int(gross[film]) for film in year if year[film] == c)

您的问题是您在每次迭代中将MaxGross设置为零。所以所有的值都会被忽略。

请同时考虑创建一个电影课并使用一个电影对象的字典,而不是多个平行的字符串。

答案 1 :(得分:1)

MaxGross

中取出for-loop
def MaxGrossFinder(c):
    MaxGross = 0  
    for film in year:                      
        f = int(gross[film])                        
        if year[film] == c:
            if f > MaxGross:
                MaxGross = f
    return MaxGross

在for循环中使用MaxGross = 0,所有先前的迭代都没有任何意义。只有最后一个会影响MaxGross。这可能不是意图。

如果cyear[film]是浮点数,则可能会出现另一个问题。不要比较浮点数是否相等(除非你知道你在做什么),因为浮点数可能有不精确的表示。代替 定义一些接近的概念:

def near(a,b,rtol=1e-5,atol=1e-8):        
   return abs(a-b)<(atol+rtol*abs(b))

并比较if near(year[film],c)

答案 2 :(得分:0)

您可以直接使用max(),

    for film in year:
        if year[film]==c:
            print(max(int(gross[film]))