Сравнение объектов в списке друг с другом - PullRequest
0 голосов
/ 02 июля 2019

У меня есть список из ~ 27.000 объектов. Каждый объект представляет собой строку из файла, где каждая строка является одной записью измерения от какого-либо инструмента. Наиболее важные аспекты объекта: Название инструмента: Int (49099, 89, ..) Название станции: Строка (K-900, MK-45, ..) Время: объект Datetime (13:34:17 01.02.2017)

Все эти объекты будут использоваться при создании файла .h5, где самый верхний «слой» является измерением. Каждое измерение содержит несколько таких линейных объектов, которые имеют одинаковые имена и имеют разницу во времени в течение некоторой продолжительности (30 минут). Одна из основных проблем заключается в том, что файлы данных, которые я читаю при создании линейных объектов, очень неструктурированы. Я не могу предположить, что строки, которые следуют друг за другом в файле, имеют какое-либо отношение друг к другу, поэтому я не могу сравнить каждую строку с предыдущей строкой, чтобы иметь некоторую логику фильтрации в части чтения. Даже файлы, которые были сгенерированы в одну и ту же дату, ДОЛЖНЫ выглядеть похожими, просто с другим названием инструмента, но это не относится к данной проблеме. Вот почему я читаю их все, а затем сравниваю все строки друг с другом. Но это занимает очень много времени и не масштабируется вообще.

Предоставленный код - это то, чем я сейчас занимаюсь, и я хотел бы услышать о любых улучшениях, которые я могу внести, или о различных способах борьбы с моей проблемой.

new = []
start = timeit.timeit()
for i, r in enumerate(self.records):
    x = (y for y in self.records if  y.compare_record_same_name(r))
    if any(r in x for x in new):
        continue
    else:
        new.append(x)

class Record():
    def compare_record_same_name(self, other):
        duration = abs(self.date_time - other.date_time)
        duration = duration.total_seconds()
        return (self.name == other.name and duration < TIME_SEPERATOR
                and duration > 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...