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

如何从含None的日期列表中提取日部分?

问题描述

我有一个包含None和YYYY-MM-DD格式字符串的列表:

date_data = [None, None, None, None, '2014-01-05', '2014-01-06', '2014-01-07', None, None, '2014-01-10']

试了两种方法都没得到预期结果:
第一种写法:

Date_List = [d for y, m, d in map(lambda x: str(x).split('-'), date_data) if y != None if m != None if d != None]

第二种写法:

test = [datetime.strptime(i, '%Y-%m-%d') for i in date_data]
test1 = [datetime.strftime(i, '%d') for i in test]

想要的结果是保留原列表里的None,只把有效日期转成日份字符串:

date_data = [None, None, None, None, '05', '06', '07', None, None, '10']

该怎么实现?

解决方案

方法一:直接字符串分割

你之前的第一种方法会把所有None过滤掉,没法保留原列表结构。换个思路,逐个判断元素:

result = []
for item in date_data:
    if item is not None:
        # 按横杠分割,取最后一段就是日份
        result.append(item.split('-')[-1])
    else:
        result.append(None)

嫌麻烦可以写成更简洁的列表推导式:

result = [item.split('-')[-1] if item is not None else None for item in date_data]

方法二:用datetime模块处理

第二种方法失败是因为datetime.strptime不能处理None,加个条件判断跳过None即可:

from datetime import datetime

result = []
for item in date_data:
    if item is not None:
        date_obj = datetime.strptime(item, '%Y-%m-%d')
        result.append(date_obj.strftime('%d'))
    else:
        result.append(None)

对应的列表推导式版本:

from datetime import datetime
result = [datetime.strptime(item, '%Y-%m-%d').strftime('%d') if item is not None else None for item in date_data]

为啥之前的方法不行?

  • 第一种方法:把None转成字符串再分割会得到['None'],后面的多重判断会把这些元素全部过滤掉,导致结果丢失了原列表中的None位置,只留下有效日期的日份。
  • 第二种方法:遍历列表时遇到None,datetime.strptime会直接抛出类型错误,因为它只接受字符串类型的参数,根本无法完成整个列表的遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:15:41