我已經創建了一個timedelta對象列表,並且我需要獲得此列表的平均值。當我嘗試做需要來自timedelta對象列表的平均值
return (sum(delta_list)/(len(delta_list)-1))
我得到類型錯誤:「詮釋」和「datetime.timedelta」
我新在與蟒蛇日期時間類的工作:爲+不支持的操作類型。我也想知道如何將這個平均值變成像days這樣的格式:hours:mins:我不需要小於mins的任何東西。
我已經創建了一個timedelta對象列表,並且我需要獲得此列表的平均值。當我嘗試做需要來自timedelta對象列表的平均值
return (sum(delta_list)/(len(delta_list)-1))
我得到類型錯誤:「詮釋」和「datetime.timedelta」
我新在與蟒蛇日期時間類的工作:爲+不支持的操作類型。我也想知道如何將這個平均值變成像days這樣的格式:hours:mins:我不需要小於mins的任何東西。
sum
想要一個起始值,這是默認的0
,但0
不能被添加到timedelta
,所以你得到的錯誤。
你只需要給sum
一個timedelta()
作爲起始值:
# this is the average
return sum(delta_list, timedelta())/len(delta_list)
要打印出來,你可以這樣做:
print str(some_delta)
如果你想要的東西定製,你可以得到some_delta.days
和some_delta.seconds
但你必須計算之間的一切。
A datetime.timedelta
對象具有訪問天,微秒和秒的屬性。您可以輕鬆地引用這些,例如:
>>> import datetime
>>> daybefore = datetime.timedelta(days=1)
>>> dayminus2 = datetime.timedelta(days=2, minutes=60)
>>> daybefore.days
1
>>> dayminus2.days, dayminus2.seconds
(2, 3600)
要提高60
的sum()
function讓你不得不分秒分鐘需要一個初始值在迭代的所有項目添加到。它默認爲0
,這就是爲什麼你會收到有關將timedelta
添加到int
的錯誤原因。
爲了解決這個問題,只傳遞一個timedelta
對象作爲第二個參數,以sum
:
(創建不帶參數一個timedelta
對應於零時差一個創建)
另外,平均一組項目通常是項目數量除以項目數量的總和,因此您不需要從len(delta_list)
中減去1。
這些更改意味着我們可以從您的語句中刪除一些括號。
所以這給你:
return sum(delta_list,timedelta())/len(delta_list)
首先,sum
將所有從列表中元素的初始值,默認情況下爲0
(爲零的整數)。因此,要在timedelta
的列表中使用sum
,您需要通過timedelta(0)
參數 - sum(delta_list, timedelta(0))
。
其次,你爲什麼要從列表的長度中減去一個?如果列表長度爲1,您將得到一個ZeroDivisionError
。
修正了上面的問題後,您最終會得到一個平均值爲timedelta
的對象。如何將其轉換爲人類可讀的格式,我將作爲練習離開你。 datetime module documentation應該回答所有可能的問題。
`謝謝先進.`。事先不要感謝,以後忘記謝謝。學會接受你的答案。 – user225312 2011-02-15 16:19:59
你發佈的代碼有什麼問題?它有錯誤嗎?請顯示你得到的錯誤? – 2011-02-15 16:22:49
我忘了粘貼它,我編輯了問題以包含錯誤。 – cferbs 2011-02-15 16:26:28