2014-04-13 134 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