Это ответ на вопрос «Это разумный подход?» (который, похоже, был проигнорирован всеми).
Резюме: Возможно, вам захочется / нужно поднять свой взгляд от превращения парной штуковины из mdtimes
в охватывающую проблему (сегментирование bigdata
).
Detail:
Желаемое использование результата выражается как:
datasegment = [x for x in bigdata if ( (x['datetime'] > tleft) and (x['datetime'] < tright))]
, который лучше выражается как:
datasegment = [x for x in bigdata if tleft < x['datetime'] < tright]
Обратите внимание, что в этом случае он не будет включать случаи, когда временная метка точно равна одной из граничных точек, поэтому давайте изменим ее на:
datasegment = [x for x in bigdata if tleft <= x['datetime'] < tright]
Но это появится в цикле:
for tleft, tright in dtsegs:
datasegment = [x for x in bigdata if tleft <= x['datetime'] < tright]
do_something_with(datasegment)
Упс! Это займет время, пропорциональное len(bigdata) * len(dtsegs)
... каковы вероятные значения len(bigdata)
и len(dtsegs)
?
Если отсортировано bigdata
, то, что вы хотите сделать, можно сделать за время, пропорциональное N
, где N = len(bigdata)
. Если bigdata
еще не отсортировано, его можно отсортировать по времени, пропорциональному N * log(N)
.
Вы можете задать другой вопрос ...
Также стоит указать, что любые элементы в bigdata
, которые имеют временную метку = max (mdtimes), не будут включены ни в один сегмент данных ... это намеренно?