Reputation: 136
I have a list with DateTime objects inside it along with None values and I need to get the max date of the list.
a =
[datetime.datetime(2020, 9, 25, 0, 0)]
[]
[None]
[datetime.datetime(2020, 9, 24, 0, 0)]
[]
[None]
[datetime.datetime(2020, 9, 24, 0, 0)]
[]
[None]
[]
[datetime.datetime(2020, 9, 24, 0, 0)]
[]
[None]
[]
[]
[datetime.datetime(2020, 9, 24, 0, 0)]
[]
[datetime.datetime(2020, 9, 24, 0, 0)]
[]
[]
[datetime.datetime(2020, 9, 24, 0, 0)]
[]
[None]
[]
[datetime.datetime(2020, 9, 24, 0, 0)]
[]
[None]
[]
[datetime.datetime(2020, 9, 24, 0, 0)]
[]
[datetime.datetime(2020, 9, 24, 0, 0)]
[datetime.datetime(2020, 9, 24, 0, 0)]
[None, datetime.datetime(2020, 9, 24, 0, 0), None]
I tried to get max date with
return max(a)
and I got this error
TypeError: '>' not supported between instances of 'datetime.datetime' and 'None Type'
how to do this in a proper way?. Ask for clarification if needed.
Upvotes: 0
Views: 1258
Reputation: 101
Try this, you can also specify a "default" value:
from datetime import datetime
a = [None, None, datetime(2022,12,31), datetime(2022,1,1)]
b = [None, None]
c = [] # also works with an empty list
m1 = max((x for x in a if x is not None), default=None)
m2 = max((x for x in b if x is not None), default=None)
m3 = max((x for x in c if x is not None), default=datetime.now())
print((m1,m2,m3))
#output:
# (datetime.datetime(2022, 12, 31, 0, 0),
# None,
# datetime.datetime(2023, 3, 31, 21, 16, 53, 840850))
Upvotes: 0
Reputation: 1526
Just filter None
elements at first.
max(x for x in a if x is not None)
Upvotes: 3