【问题标题】:How do I perform math operations on dates and sort them in Python?如何对日期执行数学运算并在 Python 中对其进行排序?
【发布时间】:2011-06-18 02:59:32
【问题描述】:

我在 Python 脚本中有需要使用的日期,这些日期在列表中。我必须保留已经存在的格式。格式为 YYYY-MM-DD。它们以 ['2010-05-12', '2011-04-15', 'Date', '2010-04-20', '2010-11-05'] 的形式显示,其中日期的顺序出现是随机的,它们被制成长度看似微不足道的列表。该数据的长度可能会变得非常大。我需要知道如何将这些日期按时间顺序排序,并从该顺序中省略看似随机放置的“日期”条目。然后我需要能够执行数学运算,例如在列表中上下移动。例如,如果我按顺序排列了五个日期,我需要能够选择一个日期,并且能够在该日期的前面或后面找到一个日期 x 空格。我对 Python 很陌生,因此首选更简单的解释和实现。让我知道是否需要任何澄清。谢谢。

【问题讨论】:

  • 为什么需要以这种格式保存它们?将它们转换为 datetime.date 对象并格式化它们以供显示。
  • 如果可以转换回来,我不需要保留这种格式。
  • 如果您的格式始终为YYYY-MM-DD(即不受当前locale的影响),那么lexicographical order与时间顺序相同。只需将它们排序为字符串!
  • 很高兴知道我可以将它们排序为字符串,但我该如何做到这一点并按时间顺序正确排列它们?

标签: python list sorting date


【解决方案1】:

你同时问了几个问题,所以我会按顺序回答。

要过滤掉"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()

【讨论】:

  • 这听起来像是我想做的。那么我该怎么做呢?
  • 我添加了一些示例和 Python 文档的链接。 (这很棒,如果你打算做任何严肃的 Python 编程,你应该真正了解它的方法)。上面的示例可能并不完全是我实际编写代码的方式,我只是想向您展示如何以一种简单的方式开始。编码愉快!
  • 附带说明,如果您将上面的示例剪切并粘贴到文本文件中,它们实际上会起作用。它们是 Python 2.[something] 以及 Python 3 兼容的。
  • 这就是我需要的!谢谢!
猜你喜欢
  • 2022-12-20
  • 2013-05-16
  • 2019-09-21
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 2021-10-17
  • 2018-05-18
相关资源
最近更新 更多