python - 聚合包含 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))
解决方案
这是因为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.
推荐阅读
- reactjs - 如何在测试中获取反应应用状态 ['Key'] 的值?
- ruby-on-rails - 如何在 Rails 4 中设置嵌套资源控制器?
- javascript - 如何让我的提交按钮在不离开当前页面的情况下显示上传的文件
- android - Gradle 同步失败:读取超时
- python - Python将复杂的字符串转换为字典列表
- android - 如何在 Kotlin 中关闭 Android 应用程序
- reactjs - 在 Redux 中在哪里存储类实例以实现可重用性?
- angular - 使用谷歌表格填充角度表
- node.js - 节点和 Sqlite:返回有许多结果作为一行
- css - CSS Grid 不会填满整个视口