如何在日期上执行数学运算并在Python中对它们进行排序?

时间:2011-06-18 02:59:33

标签: python list sorting date

我在Python脚本中有日期,我需要使用它们在列表中。我必须保留已存在的格式。格式为YYYY-MM-DD。它们以['2010-05-12','2011-04-15','Date','2010-04-20','2010-11-05']的形式显示,其中显示日期的顺序是随机的,他们被列入看似无关紧要的名单。这些数据的长度可能会非常大。我需要知道如何按时间顺序对这些日期进行排序,并省略这个看似随机放置的“日期”条目。然后我需要能够执行数学运算,例如在列表中上下移动。例如,如果我有五个日期,我需要能够获取一个日期,并能够在订单中找到该日期之前或之后的日期x空格。我是Python的新手,所以更简单的解释和实现是首选。如果需要澄清,请与我们联系。感谢。

1 个答案:

答案 0 :(得分:4)

你在同一时间提出几个问题,所以我会按顺序回答。

要过滤掉"Date"条目,请使用filter function,如下所示:

dates = ['2011-06-18', 'Date', '2010-01-13', '1997-12-01', '2007-08-11']
dates_filtered = filter(lambda d: d != 'Date', dates)

或者像这样,使用Python's list comprehensions,如果你觉得它更容易理解:

dates_filtered = [d for d in dates if d != 'Date']

您可能希望将列表中日期项的数据类型转换为date class,以便访问某些与日期相关的方法,如下所示:

from datetime import datetime
date_objects = [datetime.strptime(x,'%Y-%m-%d').date() for x in dates_filtered]

要对日期进行排序,只需使用sort method

即可
date_objects.sort()

Python中用于访问列表中项目和项目范围(或任何“序列类型”)的语法非常强大。你可以read more about it here。例如,如果要访问列表中的最后两个日期,可以执行以下操作:

print(date_objects[-2:]

如果你把它们放在一起你会得到这样的东西:

from datetime import datetime
dates = ['2011-06-18', 'Date', '2010-01-13', '1997-12-01', '2007-08-11']
my_dates = [datetime.strptime(d, '%Y-%m-%d').date()
            for d in dates
            if d != 'Date']
my_dates.sort()