2014-04-13 133 views
0

我想弄清楚一個方法來找到此列表中連續的一對項之間的時間滯後。兩個時間項之間的區別

L1=[['8/1/2000', '0:00:16'], 
    ['8/1/2008', '0:23:09'], 
    ['8/2/2008', '12:32:16'], 
    ['8/2/2008', '0:38:29']] 

所以輸出看起來像圖1和2 = 0時22分53秒,但圖2和3之間的差之間的差希望24小時+/-差而不僅僅是0時06分58秒。希望這是有道理的。任何幫助表示讚賞。

+1

你的'L1'行會產生一個SyntaxError。元素是否實際上是字符串?如果是這樣,他們看起來像是'8/1/2000,0:00:16'還是'8/1/2000','0:00:16'? – DSM

+0

我假設他們是字符串並進行相應編輯。如果我錯誤地做了這些,讓我知道或者隨時回滾。 – kojiro

+0

你是如何在2到3之間得到0:06:58的?或者說,「時間滯後」意味着什麼(我不太清楚「時滯」是什麼) – MxyL

回答

1

由於這似乎是一個匆匆奔跑的問題,所以我會簡單地向您指出datetime模塊的方向,給出一個示例,然後將其餘部分留給您。

首先,我們將把您的字符串(或我們已經假定是字符串)到datetime對象:

>>> from datetime import datetime 
>>> L1 = [['8/1/2000', '0:00:16'], ['8/1/2008', '0:23:09'], ['8/2/2008', '12:32:16'], ['8/2/2008', '0:38:29']] 
>>> d1 = [datetime.strptime(' '.join(dt), '%m/%d/%Y %H:%M:%S') for dt in L1] 
>>> d1 
[datetime.datetime(2000, 8, 1, 0, 0, 16), datetime.datetime(2008, 8, 1, 0, 23, 9), datetime.datetime(2008, 8, 2, 12, 32, 16), datetime.datetime(2008, 8, 2, 0, 38, 29)] 
>>> for d in d1: 
...  print(d) 
...  
2000-08-01 00:00:16 
2008-08-01 00:23:09 
2008-08-02 12:32:16 
2008-08-02 00:38:29 

這些我們可以簡單地減,生產timedelta對象:

>>> diffs = [y-x for x,y in zip(d1, d1[1:])] 
>>> diffs 
[datetime.timedelta(2922, 1373), datetime.timedelta(1, 43747), datetime.timedelta(-1, 43573)] 
>>> for diff in diffs: 
...  print(diff) 
...  
2922 days, 0:22:53 
1 day, 12:09:07 
-1 day, 12:06:13 
+0

感謝帝斯曼這是偉大的 – mparida

+0

我想知道爲什麼第一個差異給出了2922天,不應該給它像0天的差異,因爲列表中的1和2有相同的日期 – mparida

+0

@mparida:不,他們沒有。一個是2000年,另一個是2008年。(PS:Python是零索引的 - 列表中的第一個元素是'somelist [0]' - 所以最好說「0th」和「1st」。) – DSM