我有一個包含relativedelta objects的串列myList。我想添加所有這些relativedeltas 物件。我試過:
sum(myList)
但它給出了型別錯誤。
TypeError: unsupported operand type(s) for : 'int' and '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))
uj5u.com熱心網友回復:
這是因為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.
uj5u.com熱心網友回復:
使用減少
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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314364.html
