在Python中查找最大值
我正在做一个问题,需要用一个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
。这可能不是你想要的效果。
另一个问题是,如果 c
和 year[film]
是浮点数(小数),就不要直接比较它们是否相等(除非你很清楚这样做的后果),因为浮点数可能会有不精确的表示。相反,你可以定义一个“接近”的概念:
def near(a,b,rtol=1e-5,atol=1e-8):
return abs(a-b)<(atol+rtol*abs(b))
然后比较 if near(year[film],c)
。