Найти индекс определенного значения в массиве объектов на основе значения атрибута в Python? - PullRequest
0 голосов
/ 04 января 2019

У меня есть массив как

x = [ob1,ob2,...,obn]

каждый ob имеет два атрибута: id и время.

Теперь, как я могу эффективно и быстро получить индекс объекта на основе значения его идентификатора?

Например, если я хочу получить объект, который имеет id = 3. index () работает нормально, если массив хранит значения идентификаторов напрямую, а не объекты !!.

Я сделал цикл for, чтобы пройти через каждый объект и проверил идентификатор объекта, и как только я нашел объект, я разорвал цикл. Тем не менее, это неэффективно, так как в какой-то момент у меня есть более 10000 итераций цикла. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 04 января 2019

Вы можете использовать словарь здесь:

ids = {obj.id: obj for obj in x}

Таким образом, вы выполняете итерацию один раз и можете использовать ids.get(3) для возврата нужного вам экземпляра O (1)

Вы можете распространить это и на другие атрибуты:

times, ids = {}, {}
for obj in x:
    times[obj.time] = obj
    ids[obj.id] = obj

Я знаю, что это нехорошо с точки зрения сложности space , так как вы храните экземпляры несколько раз, но это может помочь вам

...