Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减去存储在两个单独列表中的datetime.time对象_Python_List_Python 2.7_Datetime_Subtraction - Fatal编程技术网

Python 减去存储在两个单独列表中的datetime.time对象

Python 减去存储在两个单独列表中的datetime.time对象,python,list,python-2.7,datetime,subtraction,Python,List,Python 2.7,Datetime,Subtraction,我有两个列表,每个列表中始终有相等数量的对象。它们是datetime.time对象。e、 g list1 = [ Dt_Obj_1, Dt_Obj_2] list2 = [ Dt_Obj_3, Dt_Obj_4] 我总是需要用这种格式减法 list2[0] - list1[0] , list2[1] - list1[1], etc.. 我需要返回timedelta对象,因此我也一直在尝试将其放入其中: datetime.combine(datetime(1,1,1,0,0,0), dt_ob

我有两个列表,每个列表中始终有相等数量的对象。它们是
datetime.time
对象。e、 g

list1 = [ Dt_Obj_1, Dt_Obj_2]
list2 = [ Dt_Obj_3, Dt_Obj_4]
我总是需要用这种格式减法

list2[0] - list1[0] , list2[1] - list1[1], etc..
我需要返回
timedelta
对象,因此我也一直在尝试将其放入其中:

datetime.combine(datetime(1,1,1,0,0,0), dt_obj2) - datetime.combine(datetime(1,1,1,0,0,0), dt_obj1)
用列表的理解,但我似乎找不到一种方法来把这些东西放在一起,以这样的方式使它工作。此列表中最多可存储7个
datetime.time()
对象,尽管我确信它很简单,我想我应该提及它以防万一。

用于组合列表,并与:

我在这里用以使列表理解少一点冗长;调用
comb(参数)
本质上与调用
datetime.datetime.combine(datetime.date.min,参数)
相同

演示:

你可以试试这个:

import datetime

def seconds_since_midnight(time):
    return 3600*time.hour + 60*time.minute + time.second

def subtract_times(t1, t2):
    s1, s2 = map(seconds_since_midnight, [t1, t2])
    return datetime.timedelta(seconds = s1 - s2)

result = [subtract_times(t1, t2) for t1, t2 in zip(list2, list1)]

当然,您可以将所有代码编写到单个函数中,但我选择了这种方式

我尝试了一下,我得到了这个错误
comb=partial(datetime.datetime.combine,datetime.date.min)AttributeError:type object“datetime.datetime”没有属性“datetime”
@DreamPie看看我是如何导入模块的;您从模块中导入了对象。如果您导入了类型,请删除模块引用。呜呜,谢谢。现在我得到了这个
comb=partial(datetime.combine,datetime.date.min)AttributeError:“method\u descriptor”对象没有属性“min”
@DreamPie:同样,您在那里引用了错误的导入;您必须使用
from datetime import date
date.min
。谢谢,不用说
partial
模块,它比我编写的减法语句更适合我。老实说,我甚至不知道它的存在。再次感谢!您忘记了
微秒
。此外,将来还可以添加
纳秒
(检查
时间分辨率
)。您可以直接构造
timedelta
(它接受小时、分钟、秒、微秒关键字参数)。使用
datetime.combine(datetime.date.min,time)
是的,你是对的。我想知道为什么datetime.time对象不支持减法。
>>> import datetime
>>> from functools import partial
>>> list1 = [datetime.time(10, 20), datetime.time(13, 14)]
>>> list2 = [datetime.time(2, 15), datetime.time(4, 21)]
>>> comb = partial(datetime.datetime.combine, datetime.date.min)
>>> [comb(t1) - comb(t2) for t1, t2 in zip(list1, list2)]
[datetime.timedelta(0, 29100), datetime.timedelta(0, 31980)]
import datetime

def seconds_since_midnight(time):
    return 3600*time.hour + 60*time.minute + time.second

def subtract_times(t1, t2):
    s1, s2 = map(seconds_since_midnight, [t1, t2])
    return datetime.timedelta(seconds = s1 - s2)

result = [subtract_times(t1, t2) for t1, t2 in zip(list2, list1)]