Разница между датами и временем в списке - PullRequest
0 голосов
/ 20 июня 2019

У меня есть список, называемый 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)

Этот массив теперь как datetime.Я думаю, что теперь могу понять, как сделать timedelta между этими значениями, но я все равно хотел бы получить любой совет.

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Полагаю, самый простой способ:

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)
1 голос
/ 20 июня 2019

Я бы посоветовал использовать понимание для решения этой проблемы.

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, используя списочные выражения и объединяя два частичных представления нашего списка datetime.

В этом решении предполагается, что все времена происходят в один и тот же день, и этот список не пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...