从日期列表中删除datetime.datetime日期

问题描述 投票:0回答:3

我有一个从表中返回的日期列表:

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
python-3.x list datetime
3个回答
2
投票

你可以在像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)]

2
投票

1)使用==而不是=

2)您可以直接将它与datetime对象进行比较

 for date in pre_dates:
     if date == datetime.datetime(9999, 9, 9, 0, 0):
         pre_dates.remove(date)

1
投票
for date in copy(pre_dates):
 if date == datetime.datetime(9999, 9, 9, 0, 0):
     pre_dates.remove(date)

这解决了3个问题。

  • 您不应迭代列表并同时编辑它。
  • 你使用=而不是==
  • 你最初比较错误的类型
© www.soinside.com 2019 - 2024. All rights reserved.