首页 > 解决方案 > 聚合包含 relativedelta 对象的列表的元素

问题描述

我有一个包含relativedelta 对象的列表myList。我想添加所有这些 relativedeltas 对象。我试过了:

sum(myList)

但它给出了 TypeError。

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

即使 relativedelta 对象可以用 + Opeartor 添加

以某种方式编码:

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

标签: pythonlistrelativedelta

解决方案


这是因为sum使用起始值作为0

>>> 帮助(总和)
关于内置模块内置函数 sum 的帮助:

总和(可迭代,/,开始=0)
    返回一个“开始”值(默认值:0)加上一个可迭代的数字的总和

    当可迭代对象为空时,返回起始值。
    此函数专门用于数值,可能会拒绝非数字类型。

例如,sum([1, 2])0 + 1 + 2

>>> sum([1, 2])
3

sum([1, 2], start=7)7 + 1 + 2

>>> sum([1, 2], start=7)
10

因此,要解决此问题,请使用一个项目(relativedelta对象)作为start参数,并将其他所有内容保留在可迭代中。

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)

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

print(sum(myList, rdelta1)) # so both start and items in `MyList` are `relativedelta` types.

推荐阅读