Search code examples
pythonlistrelativedelta

Aggregate elements of a list containing relativedelta objects


I have a list myList that contains relativedelta objects. I want to add all of these relativedeltas objects. I tried:

sum(myList)

but it gives TypeError.

TypeError: unsupported operand type(s) for +: 'int' and 'relativedelta'

Even though relativedelta objects can be added with + Opeartor

Code somehow:

from datetime import datetime
from dateutil.relativedelta import relativedelta

date1 = datetime(2018, 4, 9).date()
date2 = datetime(2019, 8, 18).date()
date3 = datetime(2014, 2, 1).date()
date4 = datetime(2018, 12, 30).date()

myList = []

rdelta1 = relativedelta(date2, date1)
myList.append(rdelta1)


rdelta2 = relativedelta(date4, date3)
myList.append(rdelta2)

print(sum(myList))

Solution

  • Use reduce

    from datetime import datetime
    from dateutil.relativedelta import relativedelta
    from functools import reduce
    
    date1 = datetime(2018, 4, 9).date()
    date2 = datetime(2019, 8, 18).date()
    date3 = datetime(2014, 2, 1).date()
    date4 = datetime(2018, 12, 30).date()
    
    myList = []
    
    rdelta1 = relativedelta(date2, date1)
    myList.append(rdelta1)
    
    
    rdelta2 = relativedelta(date4, date3)
    myList.append(rdelta2)
    
    print(reduce(lambda x, y: x + y, myList))