在Python中查找最大值

-2 投票
3 回答
4193 浏览
提问于 2025-04-17 03:56

我正在做一个问题,需要用一个csv文件中的数据来找出每年票房最高的电影。

我已经有了一个字典'year',里面记录了每部电影和它上映的年份,还有一个'gross'字典,记录了每部电影的票房。尽管如此,我的代码还是返回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 个回答

1

你可以直接使用max()这个函数,

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

使用 max() 这个函数。它能正确地完成这个操作。

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

你的问题在于你在每次循环时都把 MaxGross 设置为零。所以除了最后一个值,其他的都被忽略了。

另外,建议你考虑创建一个电影类,并使用一个电影对象的字典,而不是多个并行的字典。

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

如果把 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)

撰写回答