我有一个名为times
的列表,其中包含python中的日期时间值。我想将列表中的每个其他值与其前一个值之间的差值考虑在内。例如,我有
[datetime.time(0, 0), datetime.time(7, 51, 10), datetime.time(7, 51, 20), datetime.time(12, 51, 50), datetime.time(12, 52), datetime.time(16, 34, 30)]
我希望在同一列表或新列表中填充以下值:
[datetime.time(7,51,10) - datetime.time(0, 0, 0), datetime.time(12, 51, 50) - datetime.time(7, 51, 20), datetime.time(16, 34, 30) - datetime.time(12, 52, 0)]
我认为我需要使用for
循环遍历原始列表,并使用timedelta
执行计算。
这是我对for
循环的设置:
for i in times:
(something with timedelta between i+1 from i)
i+2
有人从哪里开始有什么建议吗?
编辑:
我想出了如何从datetime.time转换为datetime.datetime。看起来像这样:
dt = []
for i in times:
dt.append(datetime.combine(date.today(), i))
print(dt)
此数组现在作为日期时间。我想我现在可以弄清楚如何在这些值之间进行timedelta
了,但我仍然希望有人提出任何建议。
答案 0 :(得分:1)
我建议使用理解力来解决这个问题。
import datetime
times = [datetime.time(0, 0), datetime.time(7, 51, 10), datetime.time(7, 51, 20), datetime.time(12, 51, 50), datetime.time(12, 52), datetime.time(16, 34, 30)]
base_date = datetime.date.min
datetimes = [datetime.datetime.combine(base_date, time) for time in times]
starts = datetimes[::2]
ends = datetimes[1::2]
timedeltas = [end - start for start, end in zip(starts, ends)]
在这里,我们通过使用列表推导并将日期时间列表的两个局部视图压缩在一起来避免使用for循环。
此解决方案假定所有时间都在同一天发生,并且该列表非空。
答案 1 :(得分:1)
我想最简单的方法是:
import numpy as np
res = np.diff(dt)[::2]
其中dt
是datetime.datetime(s)的转换列表。 res
中的结果是
array([datetime.timedelta(0, 28270), datetime.timedelta(0, 18030),
datetime.timedelta(0, 13350)], dtype=object)