2017-09-30 3 views
-3

私はオブジェクト、父親の束を持っていたとしましょう。だから、それぞれの父親にはたくさんの子供がいるだろう。無限の数の子供たち。 1人の父親には、多くの子供がいます。ハードコードされたフィールド値を持たないオブジェクトを並べ替える方法は?

子供の平均年齢で各父親を分類したいと思います。

子供の数が変わり、その年齢が増加するため、必ずしも平均年齢を父親モデルにハードコーディングする必要はありません。私はその価値を動的に利用できるようにする必要があり、何とかキャッシュされているので、10万人の父親を見ると、平均的な子供の年齢ですぐに分類できます。

どのようにこれを効率的に行うかについてのアイデアはありますか?私はラムダが十分に速くて実用的ではないと確信しています。

+0

私は、ラムダが十分に高速または実用*ではないであろうと確信している。そして、子どもの数が変わる 'Father'インスタンスに毎回値をキャッシュします。並べ替えはハードコードされたフィールド値を必要としませんでした。 –

答えて

-1

使用がソートされ、ラムダ、例えば:

sorted(father_list, key=lambda: father: avg_children(father)) 

およびuはこれを確認することができます。 How to sorting

+0

権利はありますが、100,000個のオブジェクトがある場合、ソートを実行するのに1分以上かかることはありませんか? – User

1

計算とキャッシュ(ハードコード)「誕生の平均日」の代わりに、平均年齢とそれによって並べ替えます。それはあなたに同じ結果をもたらし、父が別の子供を育てなければ変わらないでしょう、そして、あなたはその父のためにそれを再計算することができます。あなたはとても似平均日付を見つけることができます:*

from datetime import datetime 

kids_dobs = ['1/2/1990', '3/4/1993', '5/6/1995'] 
dates = [datetime.strptime(dob, "%d/%m/%Y") for dob in kids_dobs] 
timestamps = [date.timestamp() for date in dates] 
avg_timestamp = sum(timestamps)/len(timestamps) 
avg_date = datetime.fromtimestamp(avg_timestamp) 

print(avg_date.strftime("%d/%m/%Y")) # 02/12/1992 
関連する問題