[英]Get average of times
鑒於以下列表:
times = [datetime.timedelta(0, 1, 256273), datetime.timedelta(0, 0, 910417), datetime.timedelta(0, 0, 388175)]
我將如何獲得平均次數? 執行以下操作會給我一個錯誤:
avg = (float(sum(times)) / len(times))
TypeError: unsupported operand type(s) for +: 'int' and 'datetime.timedelta'
這里有兩個問題:
sum()
以整數0
開始求和。 您不能將timedelta()
對象添加到整數,因此會出現錯誤:
>>> import datetime >>> times = [datetime.timedelta(0, 1, 256273), datetime.timedelta(0, 0, 910417), datetime.timedelta(0, 0, 388175)] >>> sum(times) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'datetime.timedelta'
即使你可以只使用sum()
顧左右而言他,你不能將轉換timedelta()
對象的float()
通過將其傳遞到float()
函數:
>>> float(datetime.timedelta()) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: float() argument must be a string or a number
您需要告訴sum()
以一個空的timedelta
開始(從timedelta(0)
)並使用timedelta.total_seconds()
函數來獲得一個浮點數:
>>> sum(times, datetime.timedelta())
datetime.timedelta(0, 2, 554865)
>>> sum(times, datetime.timedelta()).total_seconds()
2.554865
>>> sum(times, datetime.timedelta()).total_seconds() / len(times)
0.8516216666666666
您可以省略.total_seconds()
部分並獲得另一個timedelta()
對象:
>>> sum(times, datetime.timedelta()) / len(times)
datetime.timedelta(0, 0, 851621)
這將更准確。 您始終可以在除法之后調用.total_seconds()
:
>>> (sum(times, datetime.timedelta()) / len(times)).total_seconds()
0.851621
另一種選擇是使用列表理解來獲取floats
列表,可以將其求和:
avg = sum([t.total_seconds() for t in times]) / len(times)
# avg == 0.851621666667
但正如 Martijn 所說,從一個空的對象開始,將timedelta
對象加在一起更准確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.