【问题标题】:How to find all dates within a list of dates with Python3如何使用 Python3 在日期列表中查找所有日期
【发布时间】:2018-08-04 22:09:58
【问题描述】:

我有这样的 UTC 日期列表:

['2018-07-29T15:58:22.111904Z', '2018-07-29T15:59:22.033263Z', '2018-07-29T16:01:22.103157Z', '2018-07-30T11:41:22.032661Z', '2018-07-30T11:42:22.042215Z', '2018-07-31T12:31:21.062671Z']

这不是完整列表。我需要的是获取在整个列表中找到的所有日期。

所以对于这个列表:

['2018-07-29', '2018-07-30', '2018-07-31']

将被退回。

这将如何用 Python3 实现?

【问题讨论】:

    标签: python string python-3.x list python-datetime


    【解决方案1】:

    您可以在字符串切片中使用集合推导:

    L = ['2018-07-29T15:58:22.111904Z', '2018-07-29T15:59:22.033263Z',
         '2018-07-29T16:01:22.103157Z', '2018-07-30T11:41:22.032661Z',
         '2018-07-30T11:42:22.042215Z', '2018-07-31T12:31:21.062671Z']
    
    res = {i[:10] for i in L}
    

    结果:

    print(res)
    
    {'2018-07-30', '2018-07-31', '2018-07-29'}
    

    如果您需要列表并且不关心顺序,请使用list(res)

    如果您需要排序列表,请使用sorted(res)


    如果您希望使用强烈推荐的datetime 对象,您应该转换为datetime 并使用date 方法。这是第 3 方dateutil 模块的一种方式:

    from dateutil import parser
    
    res = {parser.parse(i).date() for i in L}
    
    print(res)
    
    {datetime.date(2018, 7, 29),
     datetime.date(2018, 7, 30),
     datetime.date(2018, 7, 31)}
    

    列表转换和排序与以前完全一样。

    【讨论】:

    • 如果它们是日期时间对象而不是字符串,那么在没有字符串切片的情况下同样可以工作。
    • A set 仅包含唯一元素。它使用散列,字符串是可散列的。集合推导是一种通过迭代创建集合的方法。
    • 太棒了。了解这一点非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多