2011-02-15 21 views
14

मैंने timedelta ऑब्जेक्ट्स की एक सूची बनाई है और मुझे इस सूची का औसत प्राप्त करने की आवश्यकता है। जब मैंको timedelta ऑब्जेक्ट्स की सूची से औसत की आवश्यकता है

return (sum(delta_list)/(len(delta_list)-1)) 

करने की कोशिश मैं लेखन त्रुटि मिलती है: 'int' और 'datetime.timedelta'

मैं अजगर datetime वर्गों के साथ काम करने में नया हूँ: + का समर्थन नहीं संकार्य प्रकार (ओं)। मैं यह भी जानना चाहता हूं कि इस औसत को प्रारूपों में कैसे दिन में प्राप्त किया जाए: घंटे: मिनट: मुझे मिनटों से कम की आवश्यकता नहीं है।

+4

'उन्नत में धन्यवाद।'। अग्रिम धन्यवाद और बाद में धन्यवाद देना भूल जाओ। अपने उत्तरों को स्वीकार करना सीखें। – user225312

+0

आपके द्वारा पोस्ट किए गए कोड के साथ क्या गलत है? क्या यह एक त्रुटि है? कृपया आपको मिली त्रुटि दिखाएं? –

+0

मैं इसे पेस्ट करना भूल गया, मैंने त्रुटि को शामिल करने के लिए प्रश्न संपादित किया। – cferbs

उत्तर

25

sum एक प्रारंभिक मूल्य है, जो 0 डिफ़ॉल्ट रूप से है चाहता है, लेकिन 0 एक timedelta को नहीं जोड़ा जा सकता है ताकि आप त्रुटि मिलती है।

# this is the average 
return sum(delta_list, timedelta())/len(delta_list) 

इसे प्रिंट करने के लिए आप यह कर सकते हैं:

तुम बस sum एक शुरुआत के मूल्य के रूप में timedelta() देना है

print str(some_delta) 

आप कुछ अनुकूलित आप some_delta.days प्राप्त कर सकते हैं चाहते हैं और some_delta.seconds लेकिन आपको बीच के बीच की गणना करना है।

+0

@cferbs: हाँ यह सही है, औसत प्राप्त करने के लिए आप 'sum (..)/len (..)' –

+0

धन्यवाद जो काम करता है! – cferbs

+0

पायथन 3.3 में सुनिश्चित करें कि आप '//' ऑपरेटर का उपयोग करें: –

2

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.

3

sum() function द्वारा मिनट आप सेकंड विभाजित करने के लिए करने जा रहे हैं प्राप्त करने के लिए करने के लिए iterable में सभी आइटम को जोड़ने के लिए एक शुरुआत के मूल्य की जरूरत है । यह 0 पर डिफ़ॉल्ट है, इसलिए आपको timedelta को int पर जोड़ने के बारे में त्रुटि मिल रही है। का मतलब

(कोई तर्क के साथ एक timedelta बनाना बनाता है एक एक शून्य समय अंतर करने के लिए इसी।)

इसके अलावा,:

इसे ठीक करने के लिए, बस दूसरा तर्क के रूप में एक timedelta वस्तु sum को पारित वस्तुओं का एक सेट आम तौर पर वस्तुओं की संख्या से विभाजित वस्तुओं का योग होता है, इसलिए आपको len(delta_list) से 1 को घटाए जाने की आवश्यकता नहीं है।

इन परिवर्तनों का मतलब है कि हम आपके कथन से कुछ ब्रैकेट को हटा सकते हैं।

तो यह आप देता है:

सभी की
return sum(delta_list,timedelta())/len(delta_list) 
3

पहले, sum एक प्रारंभिक मूल्य, जो डिफ़ॉल्ट रूप 0 (शून्य के मूल्य के साथ एक पूर्णांक) के द्वारा होता है इस सूची में से सभी तत्वों का कहते हैं। तो sumtimedelta की सूची पर उपयोग करने में सक्षम होने के लिए, आपको timedelta(0) तर्क - sum(delta_list, timedelta(0)) पास करने की आवश्यकता है।

दूसरा, आप सूची की लंबाई से एक को घटाना क्यों चाहते हैं? यदि सूची लंबाई 1 है तो आपको ZeroDivisionError मिल जाएगा।

ऊपर तय करने के बाद आप औसत timedelta ऑब्जेक्ट औसत के साथ समाप्त हो जाएंगे। इसे एक मानव-पठनीय प्रारूप में कैसे परिवर्तित करें मैं आपके लिए व्यायाम के रूप में जा रहा हूं। datetime module documentation को सभी संभावित प्रश्नों का उत्तर देना चाहिए।

+0

मुझे एहसास हुआ कि यह गलत था। मैं http://stackoverflow.com/questions/179716/average-difference-between-dates-in-python से अन्य नमूना कोड से उलझन में आया – cferbs

संबंधित मुद्दे