мои текущие указатели решений будут
- эфиром через класс итератора, который выдает новые собранные внутренние списки
- , или через функцию iter, которая выдает новые собранные внутренние списки
есть ли другой, лучший способ решить эту проблему?
Редактировать
@ Гленн: хорошее возражение.Я не думал об этом, потому что у меня были списки, упорядоченные не так, как я думал.
@ THC4k: спасибо за ваше решение.Я узнал chain.from_iterable
@ Mike DeSimone: Хмм, проверил ваше решение, но что-то пошло не так, может быть, я что-то еще упустил, ...
@ Jamie and Odomontois: Спасибо, что указали наболее подробно
моя цель
Я подделываю небольшой алгоритм, который преобразует список задач - пар / кортежей: (начало, остановка) - в упрощенный списокзадача, в которой перекрывающиеся задачи объединены.
Одно исключение: мой алгоритм завершается ошибкой, когда одно событие полностью перекрывается другим (s1 s2 e2 e1)
Подробно:
- У меня есть список 'taskList' с парами (урок - кортежи :).
- каждый кортеж состоит из 2 объектов datetime: начало и конец задачи.
- важно: хронология 'taskList', где порядок определяется при запуске, поскольку задачи могут перекрываться
- 'taskList' состоит из нескольких дней, поэтому объекты datetime
Пример, только строковое представление времени для читабельности
taskList = [(9:00,10:00),(9:30,11:00),(11:00,12:30),(13:30,14:00),(14:00,18:00)]
окончательный конечный результат:
result = [(9:00,12:30), (13:30,18:00)]
Теперь моя мысль была, когда я переставил 'taskList' способом, который я задал
taskListT1 = [(9:00,),(10:00,9:30),(11:00,11:00),(12:30,13:30),(14:00,14:00),(18:00,)]
теперь я могу исключить те кортежи (a, b), где a> = b:
taskListT2 = [(9:00,),(12:30,13:30),(18:00,)]
и преобразовать обратно:
result = [(9:00,12:30), (13:30,18:00)]