2015-04-28 34 views
2

我想将日期字符串与日期字符串列表进行比较,并找出列表中不迟于给定日期的最大日期。Python在不迟于给定日期的列表中找到最大日期

date='2015-04-16' 

dates=[str(int(date[:4])-1)+'-05-01' 
    ,str(int(date[:4])-1)+'-09-01' 
    ,str(int(date[:4])-1)+'-11-01' 
    ,date[:4]+'-05-01' 
    ,date[:4]+'-09-01' 
    ,date[:4]+'-11-01'] 

正确的输出应该是日期中的第三个元素,即'2014-11-01'。

任何人都可以帮助我吗?谢谢!

回答

3

由于您使用了字典顺序排列的日期格式,因此您可以直接比较字符串。找到最大的一组物品是max()的工作。选择组中的哪些项目可以通过生成器表达式来完成。

date='2015-04-16' 

dates=[str(int(date[:4])-1)+'-05-01' 
    ,str(int(date[:4])-1)+'-09-01' 
    ,str(int(date[:4])-1)+'-11-01' 
    ,date[:4]+'-05-01' 
    ,date[:4]+'-09-01' 
    ,date[:4]+'-11-01'] 

print max(x for x in dates if x < date) 

参考文献:

1

如果你的列表进行排序(如你的例子),你可以做到这一点使用Python的非常有效bisect模块:

import bisect 

date='2015-04-16' 

dates=[str(int(date[:4])-1)+'-05-01' 
    ,str(int(date[:4])-1)+'-09-01' 
    ,str(int(date[:4])-1)+'-11-01' 
    ,date[:4]+'-05-01' 
    ,date[:4]+'-09-01' 
    ,date[:4]+'-11-01'] 

i = bisect.bisect(dates, date) 
# Subtract one from the insertion point to find the previous date. 
print dates[i - 1] 
相关问题