2011-02-01 7 views
0

私はISETというセットを持っています。アメリカ、ブラ、CHN、などの3文字の要素の長いリストと....私の最大値を見つける方法を改善するための提案

私はまた、高と呼ばれる辞書があります。この辞書のキーは、特定のYEAR文字列と組み合わされたSETの要素です。たとえば、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 

任意の提案を、それを改善するために:

これは私が使用している何ですか?

ありがとうございます。

+0

私は(あなたがより一般的な命名規則に固執示唆つまり、[PEP 8](http://www.python.org/dev/peps/pep-0008/))。 – delnan

+0

実行に時間がかかりますか? – tkerwin

+0

@tkerwin:はい。わたし。ユーザーが特定の年スライダーをスライドするたびに実行されます。それに対する改善は高く評価されるでしょう。ありがとう。 – relima

答えて

1

提案は、実際には測定されていません:年からdictまでのマッピングheights_per_yearの高さと国コードのマッピングを使用してください。

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

は、いくつかの余分なスピード(文字列を比較する必要はありません)のためのintへの変換に注意してください。

さらに、height_per_yearのマップを降順に並べ替えると、list(国コード、高さ)のペアがソートされます。 heightもし

max_height = heights[0][1] 
1

は、あまり変更するには、データを作成または更新するときに、必要な統計情報をキャッシュしません。

+0

+1:キャッシュは強力なテクニックであり、ここでは実装が非常に簡単です( 'max_value [YEAR]')。もちろん、この特定のケースでは使用できないかもしれません...問題の用語は、あまりにも一般的であり、確実な助言を与えるものではありません。 – 6502

1

何あなたのアルゴリズムのちょうどrewordingが可能性がされています

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

あなたは、ループ自体をやってのpythonを持っている必要がありますすることができたら...

+0

'本当に*確実であることを望むなら' float( ' - inf) '。 – delnan

+0

または 'None'です。これは' <'で任意の数よりも小さくなります。 –

+0

@larsmans:どこでそれを読んだのですか?私は、さまざまな型の比較が一貫しているが、任意に並べられていることを知っていました(http://docs.python.org/library/stdtypes.htmlを参照)。 Noneは他の何よりも少ないことが保証されているところはどこにありますか? – 6502

関連する問題