从日期列表中删除datetime.datetime日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从日期列表中删除datetime.datetime日期相关的知识,希望对你有一定的参考价值。
我有一个从表中返回的日期列表:
pre_dates = [datetime.datetime(2015, 4, 16, 0, 0), datetime.datetime(2015, 4, 16, 0, 0), datetime.datetime(2015, 4, 16, 0, 0), datetime.datetime(2015, 4, 16, 0, 0), datetime.datetime(2015, 4, 16, 0, 0), datetime.datetime(2015, 4, 16, 0, 0), datetime.datetime(2015, 4, 16, 0, 0), datetime.datetime(2015, 4, 16, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0), datetime.datetime(9999, 9, 9, 0, 0)]
如您所见,它们的格式为datetime.datetime(YYYY, M, DD, H, M)
。我基本上想要从列表中删除所有datetime.datetime(9999, 9, 9, 0, 0)
项目。个别日期实际上等于9999-09-09 00:00:00
所以我一直在尝试以下,但它总是在我的syntax error: invalid syntax
声明中抛出if
。这有什么问题?
for date in pre_dates:
if date = 9999-09-09 00:00:00:
pre_dates.remove(date)
# also tried if date = datetime.datetime(9999, 9, 9, 0, 0):
# same error
答案
你可以在像this这样的日期进行平等比较。
toRemove = datetime.datetime(9999, 9, 9, 0, 0)
for date in pre_dates:
if (date == toRemove):
pre_dates.remove(date)
然而,这是一个有点昂贵的操作,因为remove
在O(n)中运行,如here所见。我会使用这样的列表理解:
goodDates = [d for d in pre_dates if d != datetime.datetime(9999, 9, 9, 0, 0)]
另一答案
1)使用==
而不是=
2)您可以直接将它与datetime
对象进行比较
for date in pre_dates:
if date == datetime.datetime(9999, 9, 9, 0, 0):
pre_dates.remove(date)
另一答案
for date in copy(pre_dates):
if date == datetime.datetime(9999, 9, 9, 0, 0):
pre_dates.remove(date)
这解决了3个问题。
- 您不应迭代列表并同时编辑它。
- 你使用=而不是==
- 你最初比较错误的类型
以上是关于从日期列表中删除datetime.datetime日期的主要内容,如果未能解决你的问题,请参考以下文章
python中datetime模块中的strftime与strptime