建议改进我找到最大值的方法

时间:2011-02-01 16:33:51

标签: python optimization

我有一套叫做ISET的套装;有很多3个字母的元素,如:USA,BRA,CHN,....

我还有一本名为高度的字典。此字典的键是SET的元素与某个YEAR字符串的组合。例如:USA1991,USA1992,...,BRA1991,......

在给定年份内查找所有国家/地区的最大高度值的最佳方法是什么?

这就是我一直在使用的:

YEAR = getuserselection()
for i in ISET:
    z = heights.get(i + YEAR, None)
    if z is None: continue
    if z > Max: Max = z

有任何改进建议吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

建议,实际上未衡量:使用从{到年heights_per_year映射国家/地区代码到高度的映射dict

year = getuserselection()
heights = heights_per_year[int(year)]
max_height = max(a.itervalues())

请注意转换为int以获得额外的速度(无需比较字符串)。

更好的是,让height_per_year映射到(国家/地区代码,高度)对的降序排序list

max_height = heights[0][1]

答案 1 :(得分:1)

如果height变化不大,请在创建或更新数据时缓存所需的统计信息。

答案 2 :(得分:1)

您的算法的重新措辞可能是:

YRNormalizer = max(heights.get(z+YEAR, -99999) for z in ISET)

如果可以,你应该让python自己做循环......