Удаление даты datetime.datetime из списка дат - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть список дат, возвращаемых из таблицы:

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

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018
for date in copy(pre_dates):
 if date == datetime.datetime(9999, 9, 9, 0, 0):
     pre_dates.remove(date)

это решает 3 проблемы.

  • Не следует перебирать список и редактировать его одновременно.
  • Вы использовали = вместо ==
  • Вы сравнили неправильные типы изначально
0 голосов
/ 13 сентября 2018

Вы можете проводить сравнения на равенство с такими датами, как this .

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

Однако, это довольно дорогая операция, потому что remove выполняется в O (n), как видно здесь .Я бы использовал понимание списка следующим образом:

goodDates = [d for d in pre_dates if d != datetime.datetime(9999, 9, 9, 0, 0)]
0 голосов
/ 13 сентября 2018

1) Используйте ==, а не =

2) Вы можете напрямую сравнить его с datetime объектом

 for date in pre_dates:
     if date == datetime.datetime(9999, 9, 9, 0, 0):
         pre_dates.remove(date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...