उत्तर
स्ट्रिंग की एक सूची के रूप में?
timeList = [ '0:00:00', '0:00:15', '9:30:56' ]
totalSecs = 0
for tm in timeList:
timeParts = [int(s) for s in tm.split(':')]
totalSecs += (timeParts[0] * 60 + timeParts[1]) * 60 + timeParts[2]
totalSecs, sec = divmod(totalSecs, 60)
hr, min = divmod(totalSecs, 60)
print "%d:%02d:%02d" % (hr, min, sec)
परिणाम:
9:31:11
मेरे पास यह एक सरणी में वर्णित तारों के रूप में था .. धन्यवाद .... – Hulk
सिर्फ 'divmod()' कुछ एयरप्ले देने के लिए +1 ... दयालुता कभी भी बहादुर नहीं था ताकि जीवीआर को '/%' लागू करने के लिए अनुरोध किया जा सके और '/% =' ऑपरेटर ;-) ... इसे पढ़ें और रोएं: 'मिनट, सेकंड /% = 60; घंटे, मिनट /% = 60; दिन, घंटे /% = 24' –
@ जॉन: मुझे व्यक्तिगत रूप से यह अवैध लगता है। आपको याद रखना होगा कि एलएचएस पर कौन सी चीज इनपुट लाभांश है। यह एक ऐसा मामला भी बनाता है जहां एक ऑपरेटर टुपल लौटाता है, जो चेनिंग ऑपरेशंस को रोकता है, जो बाइनरी ऑपरेटरों का पूरा बिंदु है। मुझे 'divmod' रास्ता एक * बहुत * स्पष्ट लगता है। –
मान लें कि आप एक कुल समय के लिए सेकंड जोड़ना चाहते हैं:
def parse_time(s):
hour, min, sec = s.split(':')
try:
hour = int(hour)
min = int(min)
sec = int(sec)
except ValueError:
# handle errors here, but this isn't a bad default to ignore errors
return 0
return hour * 60 * 60 + min * 60 + sec
print parse_time('0:00:00') + parse_time('0:00:15') + parse_time('9:30:56')
अनुभवहीन दृष्टिकोण (अपवाद हैंडलिंग के बिना):
#!/usr/bin/env python
def sumup(*times):
cumulative = 0
for t in times:
hours, minutes, seconds = t.split(":")
cumulative += 3600 * int(hours) + 60 * int(minutes) + int(seconds)
return cumulative
def hms(seconds):
"""Turn seconds into hh:mm:ss"""
hours = seconds/3600
seconds -= 3600*hours
minutes = seconds/60
seconds -= 60*minutes
return "%02d:%02d:%02d" % (hours, minutes, seconds)
if __name__ == '__main__':
print hms(sumup(*("0:00:00", "0:00:15", "9:30:56")))
# will print: 09:31:11
यह आपके द्वारा इस फ़ॉर्म पर निर्भर करता है, उदाहरण के लिए आप पहले से ही उन्हें datetime.timedelta
रों के रूप में है, तो आप सिर्फ उन्हें योग सकता:
>>> s = datetime.timedelta(seconds=0) + datetime.timedelta(seconds=15) + datetime.timedelta(hours=9, minutes=30, seconds=56)
>>> str(s)
'9:31:11'
का उपयोग करके बेहतर है मुझे लगता है कि यह डेल्टा – dassouki
lines = ["0:00:00", "0:00:15", "9:30:56"]
total = 0
for line in lines:
h, m, s = map(int, line.split(":"))
total += 3600*h + 60*m + s
print "%02d:%02d:%02d" % (total/3600, total/60 % 60, total % 60)
मैं वास्तव में निराश हूँ अगर कोई और अधिक pythonic समाधान नहीं है ... :(
भयानक एक ->
timeList = [ '0:00:00', '0:00:15', '9:30:56' ]
ttt = [map(int,i.split()[-1].split(':')) for i in timeList]
seconds=reduce(lambda x,y:x+y[0]*3600+y[1]*60+y[2],ttt,0)
#seconds == 34271
यह एक भयानक भी लग रहा है ->
zero_time = datetime.datetime.strptime('0:0:0', '%H:%M:%S')
ttt=[datetime.datetime.strptime(i, '%H:%M:%S')-zero_time for i in timeList]
delta=sum(ttt,zero_time)-zero_time
# delta==datetime.timedelta(0, 34271)
# str(delta)=='9:31:11' # this seems good, but
# if we have more than 1 day we get for example str(delta)=='1 day, 1:05:22'
सच निराशा भी यह है ->
sum(ttt,zero_time).strftime('%H:%M:%S') # it is only "modulo" 24 :(
मैं वास्तव में देखने के लिए एक लाइनर हां, तो मैं python3 में एक बनाने के लिए करने की कोशिश की तरह है: पी (अच्छा परिणाम लेकिन भयानक लग)
import functools
timeList = ['0:00:00','0:00:15','9:30:56','21:00:00'] # notice additional 21 hours!
sum_fnc=lambda ttt:(lambda a:'%02d:%02d:%02d' % (divmod(divmod(a,60)[0],60)+(divmod(a,60)[1],)))((lambda a:functools.reduce(lambda x,y:x+y[0]*3600+y[1]*60+y[2],a,0))((lambda a:[list(map(int,i.split()[-1].split(':'))) for i in a])(ttt)))
# sum_fnc(timeList) -> '30:40:11'
timedeltas का उपयोग करना (अजगर 3.4 में परीक्षण किया गया):
import datetime
timeList = ['0:00:00', '0:00:15', '9:30:56']
sum = datetime.timedelta()
for i in timeList:
(h, m, s) = i.split(':')
d = datetime.timedelta(hours=int(h), minutes=int(m), seconds=int(s))
sum += d
print(str(sum))
परिणाम:
9:31:11
2.7 में भी काम करता है। +1 क्योंकि कोड पठनीय और सहज है – adelval
Bellow को कम करने और सूची समझ का उपयोग कर एक समाधान है:
from functools import reduce
from datetime import timedelta
time_list = ['0:00:00', '0:00:15', '9:30:56']
total = reduce(lambda x, y: x + y,
[timedelta(hours=int(ms[0]), minutes=int(ms[1]), seconds=int(ms[2]))
for t in time_list
for ms in [t.split(':')]])
print(f'Total time: {total}')
कुल समय: 9:31:11
- 1. पायथन में यूटीसी समय में टाइमज़ोन संक्षेप के साथ गैर-यूटीसी समय स्ट्रिंग को कनवर्ट करें, जबकि डेलाइट बचत
- 2. संक्षेप के साथ मॉडलों के रेलों के अपरंपरागत नामकरण
- 3. "संक्षेप में"
- 4. जोडा समय में ऑफसेट घंटों का उपयोग करते समय समय क्षेत्र संक्षेप को कैसे मुद्रित करें?
- 5. सी # विशेषता नाम संक्षेप
- 6. विजुअल रिएक्शन समय के लिए पायथन प्रोग्राम
- 7. स्टैकलेस पायथन नेटवर्क प्रदर्शन समय के साथ घट रहा है?
- 8. पायथन अनुरोध के साथ वेबसाइट लोड समय मापें
- 9. संक्षेप करने के लिए कुशल तरीके
- 10. राज्य के नाम से राज्य संक्षेप बनाना
- 11. संक्षेप में अमेज़न S3 एन्क्रिप्शन
- 12. पायथन समय अंतर
- 13. विकल्प के साथ पायथन सजावट
- 14. PHP में समय क्षेत्र के नाम और संक्षेप कैसे प्राप्त करें?
- 15. पायथन यूनिक्स समय जावास्क्रिप्ट
- 16. पायथन समय तुलना
- 17. पायथन ftplib समय
- 18. पायथन समय प्रारूप चेक
- 19. पायथन में स्ट्रेट समय
- 20. पायथन डेलाइट बचत समय
- 21. पायथन समय ऑफ़सेट
- 22. MVC.NET मिलीसेकेंड जब संक्षेप में ट्रैकिंग
- 23. बहुत बड़े डेटासेट के साथ प्लीयर, डीएमसी, और संक्षेप() का उपयोग करना?
- 24. पायथन: समानांतर सूची के साथ क्रमबद्ध सूची
- 25. अजगर समूह, और संक्षेप में प्रस्तुत सरणी ख - प्रदर्शन
- 26. ग्रुपडिक्ट्स के साथ पायथन रेफिंडल
- 27. पायथन के साथ rsync नियंत्रित?
- 28. Emacs के साथ पायथन 3
- 29. पायथन के साथ स्वचालित फ़ायरफ़ॉक्स?
- 30. पायथन में डेलाइट बचत समय
मुझे लगता है आप 00:00:00 से मतभेद को जोड़ने के लिए करना चाहते हैं? यानी, वास्तविक समय की बजाय डेल्टा? –
@steve: ठीक है, डेल्टा '9: 30: 56' – SilentGhost
तक जोड़ देगा, मैं अजगर 2.4 का उपयोग कर रहा हूं और मैं स्ट्रिपटाइम का उपयोग नहीं कर सकता, हाँ मैं डेल्टा जोड़ना चाहता हूं और उपर्युक्त उदाहरण के लिए उत्तर 9 होना चाहिए : 31: 11 – Hulk