0

I have a list of dates being returned from a table:

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)]

As you can see, they are in the format datetime.datetime(YYYY, M, DD, H, M). I basically want to get rid of all the items that are datetime.datetime(9999, 9, 9, 0, 0) from the list. The individual dates actually equate to 9999-09-09 00:00:00 so I keep trying the following, but it always throws a syntax error: invalid syntax on my if statement. What's the problem here?

 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
gwydion93
  • 1,681
  • 3
  • 28
  • 59

3 Answers3

2

1) Use == not =

2) You can directly compare it with the datetime object

 for date in pre_dates:
     if date == datetime.datetime(9999, 9, 9, 0, 0):
         pre_dates.remove(date)
Sruthi
  • 2,908
  • 1
  • 11
  • 25
2

You can do equality comparisons on dates like this.

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

However, This is a somewhat expensive operation because remove runs in O(n), as seen here. I would use a list comprehension like this:

goodDates = [d for d in pre_dates if d != datetime.datetime(9999, 9, 9, 0, 0)]
Woody1193
  • 7,252
  • 5
  • 40
  • 90
  • I really like this second method with the list comprehension. I was seeing that using the loop with `pre_dates.remove(date)`, when I ran `print(pre_dates)`, there were still unwanted items in the list. Not sure why, but your method overcomes that issue. Thanks. – gwydion93 Sep 13 '18 at 15:05
  • @gwydion93 No problem. List comprehensions are Python's LINQ :) – Woody1193 Sep 14 '18 at 17:12
1
for date in copy(pre_dates):
 if date == datetime.datetime(9999, 9, 9, 0, 0):
     pre_dates.remove(date)

this addresses 3 problems.

  • You shouldn't iterate over a list and edit it at the same time.
  • You used = instead of ==
  • you compared wrong types initially
Landar
  • 278
  • 1
  • 10