Сортировка списка, содержащего время
Есть список кортежей, содержащий дату и время:
s = [('26.02.2024', '12:00'), ('26.02.2024', '12:30'), ('26.02.2024', '13:00'), ('26.02.2024', '13:30'), ('26.02.2024', '15:00'), ('26.02.2024', '15:30'), ('26.02.2024', '17:00'), ('26.02.2024', '18:00')]
Необходимо список привести к такому виду:
s = [[('26.02.2024', '12:00'), ('26.02.2024', '12:30'), ('26.02.2024', '13:00'), ('26.02.2024', '13:30')], [('26.02.2024', '15:00'), ('26.02.2024', '15:30')], [('26.02.2024', '17:00')], [('26.02.2024', '18:00')]]
Т.е. список содержит списки кортежей отсортированных по следующему принципу: время должно идти друг за другом с интервалом в 30 минут. Если интервал не равен 30 минутам, то кортеж с этим временем добавляется в следующий список и т.д. Я пытаюсь сделать так:
spisok = [('26.02.2024', '12:00'), ('26.02.2024', '12:30'), ('26.02.2024', '13:00'), ('26.02.2024', '13:30'), ('26.02.2024', '15:00'), ('26.02.2024', '15:30'), ('26.02.2024','17:00'), ('26.02.2024', '18:00')]
spisok = [('26.02.2024', '12:00'), ('26.02.2024', '12:30'), ('26.02.2024', '13:00'), ('26.02.2024', '13:30'),
('26.02.2024', '15:00'), ('26.02.2024', '15:30'), ('26.02.2024', '17:00'), ('26.02.2024', '18:00')]
Я пытался это сделать так:
def func(s):
x = 0
y = 1
spisok_sort = []
spisok_no_sort = []
for i in spisok:
if y < len(spisok):
date1 = datetime.strptime(spisok[x][1], '%H:%M')
date2 = datetime.strptime(spisok[y][1], '%H:%M')
if date2 - date1 == timedelta(minutes=30):
if i not in spisok_sort:
spisok_sort.append(i)
spisok_sort.append(spisok[x + 1])
print(spisok_sort)
else:
spisok_no_sort.append(spisok[y])
x += 1
y += 1
return spisok_sort
total_list = func(spisok)
print(total_list)
Подскажите, пожалуйста, как это можно сделать!
Ответы (1 шт):
Автор решения: ikikaidesu
→ Ссылка
# для сравнения времени
from datetime import datetime, timedelta
# массив дат
s = [('26.02.2024', '12:00'), ('26.02.2024', '12:30'), ('26.02.2024', '13:00'),
('26.02.2024', '13:30'), ('26.02.2024', '15:00'), ('26.02.2024', '15:30'),
('26.02.2024', '17:00'), ('26.02.2024', '18:00')]
# создаем массив с ответом
answer = []
# временный массив для дат который пойдет в answer
l = []
# обходим массив дат
for i in s:
# переводим дату в datetime формат
i = datetime.strptime("{0} {1}".format(i[0], i[1]), "%d.%m.%Y %H:%M")
# проверяем есть ли в l даты и если есть равна ли у них разница в 30 минут
if len(l) > 0 and i - l[-1] == timedelta(minutes=30):
l.append(i)
# если нет
else:
# если что-то есть, то добавляем
if len(l) > 0:
answer.append(l)
# обновляем временный список
l = [i]
# добавляем последний элемент
if len(l) > 0:
answer.append(l)
print(answer)