我有一个对象列表。 列表中的一个属性是m_expiry,它存储为字符串。 我试图找到最短的日期差异(在现在和那个属性值之间)并获得列表的索引或对象本身。
目前 expiryValue 返回日期差异而不是索引/对象。(我希望它返回idx = 0或object [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)
你很亲密。这里的诀窍是最小化项目,键入他们的timedelta ,而不是最小化timedeltas本身。
对这些项目采取最低限度,并使用key
的{{1}}关键字参数。
min
您将定义的键功能应接受一个项目并返回该项目的timedelta。您还应该注意使用timedelta的绝对值,这是您在示例代码中没有做到的。
这将返回项目本身,该项目已经包含您可以在min(items, key=...)
访问的索引。