You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

筛选含日期的字符串列表,提取其中所有对应星期日的日期

筛选文件路径中星期日日期的其他实现方案

现有待处理的字符串列表如下,所有元素均为年/月/日/文件名格式的路径:

['2021/08/01/EUR_USD.json',
 '2021/08/02/EUR_USD.json',
 '2021/08/03/EUR_USD.json',
 '2021/08/04/EUR_USD.json',
 '2021/08/05/EUR_USD.json',
 '2021/08/06/EUR_USD.json',
 '2021/08/08/EUR_USD.json',
 '2021/08/09/EUR_USD.json',
 '2021/08/10/EUR_USD.json',
 '2021/08/11/EUR_USD.json',
 '2021/08/12/EUR_USD.json',
 '2021/08/13/EUR_USD.json',
 '2021/08/15/EUR_USD.json']

需求为筛选上述列表中路径对应日期为星期日的条目,返回YYYY-MM-DD格式的日期列表,以下是不同实现方案:


方案1:基础循环优化版

优化了原有列表推导式里重复split+join的冗余操作,同时用isoweekday替代weekday,判断逻辑更直观(isoweekday返回值1对应周一、7对应周日,避免记错取值范围):

from datetime import datetime

def dayOfWeek(l):
    res = []
    for path in l:
        # 所有路径前10位固定为YYYY/MM/DD格式,直接截取即可
        raw_date = path[:10]
        date_obj = datetime.strptime(raw_date, '%Y/%m/%d')
        if date_obj.isoweekday() == 7:
            # 直接转成要求的横杠分隔格式
            res.append(date_obj.strftime('%Y-%m-%d'))
    return res

方案2:pandas向量化处理版

适合待处理路径量级较大的场景,向量化操作比普通Python循环效率高很多:

import pandas as pd

def dayOfWeek(l):
    # 批量提取日期部分并转成日期类型
    date_s = pd.Series(l).str[:10]
    date_s = pd.to_datetime(date_s, format='%Y/%m/%d')
    # 筛选星期日(pandas的weekday规则为0=周一、6=周日)
    sunday_dates = date_s[date_s.dt.weekday == 6]
    # 转成目标字符串格式后返回列表
    return sunday_dates.dt.strftime('%Y-%m-%d').tolist()

方案3:连续日期场景专用版

如果你的路径是按天连续生成的,只要找到第一个星期日之后每隔7天就是下一个星期日,不需要每次都解析日期,性能最高:

from datetime import datetime, timedelta

def dayOfWeek(l):
    res = []
    first_sunday = None
    interval = timedelta(days=7)
    for path in l:
        raw_date = path[:10]
        date_obj = datetime.strptime(raw_date, '%Y/%m/%d')
        if not first_sunday:
            if date_obj.weekday() == 6:
                res.append(date_obj.strftime('%Y-%m-%d'))
                first_sunday = date_obj
        else:
            if date_obj == first_sunday + interval:
                res.append(date_obj.strftime('%Y-%m-%d'))
                first_sunday = date_obj
    return res

以上三种方案返回结果均为:['2021-08-01', '2021-08-08', '2021-08-15'],和你现有实现的输出一致。


内容的提问来源于stack exchange,提问作者nipy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:48:04