2017-03-01 11 views
2

私はオブジェクトのリストを持っています。 リスト内の属性の1つは、文字列として格納されているm_expiryです。 私は、現在とその属性値の間で最も短い日付の差異を見つけようとしており、リストのインデックスまたはオブジェクト自体のいずれかを取得しようとしています。オブジェクトのリストを列挙してインデックスまたはオブジェクトを返す

現在expiryValue日付差はなく、インデックス/オブジェクトを返す(私はそれがIDX = 0を返すまたはオブジェクトたい[0]

expiryValue = min((datetime.strptime(item.m_expiry,'%Y%m%d') -datetime.now()) for item in object) 

15日、10:12:00.077586

idx id  x y z a  m_expiry 

    [0] 215465490 ES ESH7 FUT GLOBEX 20170317 
    [1] 225652200 ES ESM7 FUT GLOBEX 20170616 
    [2] 236950077 ES ESU7 FUT GLOBEX 20170915 
    [3] 247950613 ES ESZ7 FUT GLOBEX 20171215 
    [4] 258973438 ES ESH8 FUT GLOBEX 20180316 
+0

あなたの質問を改善することはできますか?それをより精巧に;-) –

答えて

1

あなたが近くにあります。ここでのトリックはtimedeltas自分自身を最小化するとは対照的に、が、彼らのはtimedeltaをオフキーイング、アイテムを最小限にすることである。

最小限のものを取り、keyキーワード引数をminとしてください。

min(items, key=...) 

定義するキー機能は、項目を受け入れ、その項目のタイムゾーンを返す必要があります。あなたはまた、あなたのサンプルコードでやっていないtimedeltaの絶対値を作るように気を付けるべきです。

これは、既にアクセス可能なインデックスを持っている項目自体を返します。item.idx

+0

素晴らしい感謝!インクルード:from演算子import attregetter – Karun

関連する問題