【问题标题】:Finding a max value in python在python中找到最大值
【发布时间】:2011-10-08 15:54:46
【问题描述】:

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

我已经有了每部电影的“年份”及其上映年份和“毛片”的名称。 尽管如此,我的代码仍然返回 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

【问题讨论】:

  • 我想可能是因为 year[film] 永远不等于 c。
  • 这是一个相当尴尬的结构。
  • 你为什么不用max()
  • gross 是全局变量吗?
  • 填写年份和总额

标签: python for-loop


【解决方案1】:

使用max() 函数。它正确地执行了此操作。

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

您的问题是您在每次迭代中将MaxGross 设置为零。所以除了最后一个之外的所有值都会被忽略。

还请考虑创建一个 Film 类并使用一个电影对象字典,而不是使用多个并行字典。

【讨论】:

    【解决方案2】:

    for-loop中取出MaxGross

    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)

    【讨论】:

      【解决方案3】:

      你可以直接使用max(),

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-12
        • 1970-01-01
        • 1970-01-01
        • 2020-05-03
        • 2023-01-05
        • 2017-12-17
        • 2021-05-11
        相关资源
        最近更新 更多