Как я могу сгруппировать последовательные периоды времени вместе в Python? - PullRequest
0 голосов
/ 31 октября 2018

Если я отсортировал список периодов времени, таких как p1, p2, p3, каждый из которых имеет время начала и окончания; как я могу сгруппировать их, если они последовательны, например, запуск p2 после окончания p1, но запуск p3 через некоторое время приведет к следующей группировке: [p1, p2], [p3], ...?

1 Ответ

0 голосов
/ 31 октября 2018

Общая идея заключается в том, что мы не можем напрямую сравнивать элемент с последним элементом в groupby(), поэтому сначала нам нужно установить атрибут индекса группы для каждого элемента при циклическом просмотре списка элементов; тогда groupby() может использовать эти атрибуты для создания групп:

import itertools
last = None
n = 1    
for period in periods:
  if last and period.start != period.end:
    n+=1
  period.n = n
  last = period
groups = itertools.groupby(periods, lambda p: p.n)
# if total num of items isn't too big, for easier debugging or logging,
# convert each subgroup iterator to a list:
groups = (list(g[1]) for g in groups)
...