首页 > 解决方案 > 在 Python 中过滤包含混合日期格式的列表

问题描述

假设我有一个 Python 格式的日期列表,格式为YYYY-mm-ddor 或YYYY-mm.

['2020-08-11', '2020-08-10', '2020-08-09', '2020-08-08', '2020-08-07',
 '2020-08-06', '2020-08-05', '2020-08-04', '2020-08-03', '2020-08-02',
 '2020-08-01', '2020-08', '2020-07', '2020-06', '2020-05', '2020-04',
 '2020-03', '2020-02', '2020-01']

YYYY-mm如果已经存在更具体的日期,我想从列表中删除任何日期。

所以在上面的例子中,我们需要删除'2020-08',因为'2020-08-01'to'2020-08-11'在列表中。

所以过滤后的列表是这样的:

['2020-08-11', '2020-08-10', '2020-08-09', '2020-08-08', '2020-08-07',
 '2020-08-06', '2020-08-05', '2020-08-04', '2020-08-03', '2020-08-02',
 '2020-08-01', '2020-07', '2020-06', '2020-05', '2020-04', '2020-03',
 '2020-02', '2020-01']

有没有一种优雅而快速的方法来实现这一点?提前致谢。

标签: pythonlistfilter

解决方案


您可以从完整日期构建一组所有月份部分,然后从该集中出现的原始数据中过滤掉条目:

months_in_dates = {d[:7] for d in data if len(d) > 7}
filtered = [d for d in data if d not in months_in_dates]

推荐阅读