簡體   English   中英

獲取平均次數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM