Python在列表中查找不迟于给定日期

时间:2015-04-28 02:18:35

标签: python date

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

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'。

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

2 个答案:

答案 0 :(得分: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 :(得分: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]