Добавление элемента к каждому списку внутри списка - PullRequest
0 голосов
/ 11 февраля 2020

Если у меня есть такой список:

lst = [['00:10:00', '00:08:00'], ["00:05:00', '00:04:00']]

Как можно вычесть первое и второе число каждого списка и добавить результат в конце каждого списка, чтобы я получил:

lst = [['00:10:00', '00:08:00', '00:02:00'], ['00:05:00', '00:04:00', '00:01:00']]

Мой текущий код:

end_lst = []
lst = [['00:10:00', '00:08:00'], ['00:05:00', '00:04:00']]
for t1, t2 in lst:
    d1 = datetime.datetime.strptime(t1, "%H:%M:%S")
    d2 = datetime.datetime.strptime(t2, "%H:%M:%S")
    diff = (d2 - d1)
    end_lst = [item + [diff] for item in lst]
print(end_lst)

, но вывод не получается должным образом для каждого списка. Есть идеи?

Вывод:

[['00:10:00', '00:08:00', datetime.timedelta(-1, 86160)], ['00:05:00', '00:04:00', datetime.timedelta(-1, 86160)]]

Ответы [ 5 ]

1 голос
/ 11 февраля 2020

Это довольно легко, если вы обрабатываете каждый элемент как список без распаковки:

lst = [['00:10:00', '00:08:00'], ['00:05:00', '00:04:00']]
for internal_list in lst:
    d1 = datetime.datetime.strptime(internal_list[0], "%H:%M:%S")
    d2 = datetime.datetime.strptime(internal_list[1], "%H:%M:%S")
    diff = (d2 - d1)
    internal_list.append(diff)
print(lst)
1 голос
/ 11 февраля 2020

Просто преобразуйте datetime.timedelta объекты в строки, убедившись, что d1 вычитается из d2.

lst = [['00:10:00', '00:08:00'], ['00:05:00', '00:04:00']]
for t1, t2 in lst:
    d1 = datetime.datetime.strptime(t1, "%H:%M:%S")
    d2 = datetime.datetime.strptime(t2, "%H:%M:%S")
    diff = str(d1 - d2) # Only change to your current source code
    end_lst = [item + [diff] for item in lst]
print(end_lst) # [['00:10:00', '00:08:00', '0:02:00'], ['00:05:00', '00:04:00', '0:01:00']]

Вдохновленный @ferhen, вы также можете использовать списочное понимание, чтобы это более кратко, хотя читаемость, возможно, принесена в жертву.

end_lst = [[t1, t2, str(datetime.datetime.strptime(t1, "%H:%M:%S") - datetime.datetime.strptime(t2, "%H:%M:%S"))] for t1, t2 in lst]
print(end_lst) # [['00:10:00', '00:08:00', '0:02:00'], ['00:05:00', '00:04:00', '0:01:00']]

Теперь, это предполагает, что t1 представляет время, которое позже, чем t2. Если нет, вы можете получить такие результаты, как '-1 day, 23:59:00' в своем вложенном списке.

1 голос
/ 11 февраля 2020

Как насчет следующего?

datetime импорта

end_lst = []
lst = [['00:10:00', '00:08:00'], ['00:05:00', '00:04:00']]
for tup in lst:
    d1 = datetime.datetime.strptime(tup[0], "%H:%M:%S")
    d2 = datetime.datetime.strptime(tup[1], "%H:%M:%S")
    diff = (d1 - d2)
    end_lst = [item + [str(diff)] for item in lst]

print(end_lst)
0 голосов
/ 11 февраля 2020

Ваш lst неверен, в противном случае ваш код в порядке.

import datetime
lst = [['00:10:00', '00:08:00'], ["00:05:00", '00:04:00']]

end_lst = []
lst = [['00:10:00', '00:08:00'], ['00:05:00', '00:04:00']]
for t1, t2 in lst:
    d1 = datetime.datetime.strptime(t1, "%H:%M:%S")
    d2 = datetime.datetime.strptime(t2, "%H:%M:%S")
    diff = (d2 - d1)
    end_lst = [item + [diff] for item in lst]
print(end_lst)

Выходные данные будут:

[['00:10:00', '00:08:00', datetime.timedelta(-1, 86340)], ['00:05:00', '00:04:00', datetime.timedelta(-1, 86340)]]

Я предполагаю, что проблема связана с вашим объектом timedelta , Вы можете найти документацию здесь: документация по дате и времени .

Вот блокнот Google Colab, который я создал на вашем примере, и правильное редактирование. Colab Notebook

0 голосов
/ 11 февраля 2020

Один лайнер

end_lst = [[t1, t2, str(datetime.datetime.strptime(t1, "%H:%M:%S") - datetime.datetime.strptime(t2, "%H:%M:%S"))] for (t1, t2) in lst]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...