Сортировка списка по idx attirbute другого списка - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть два списка, с которыми я работаю, первый - это список объектов, таких как

A = [a1, a2, a3, a4]

, и другой список объектов, у которых есть атрибут, вызывающий индекс, например,

B = [b1.idx==2, b2.idx==1, b3.idx==3, b4.idx==4]

Моя цель - отсортировать список A в соответствии с атрибутом idx объектов в списке B, поэтому мой результирующий список для этого примера будет выглядеть так:

C = [a2, a1, a3, a4]

Я сделал это, используя a для l oop но мне любопытно, есть ли более эффективный способ сделать это. Примером моей реализации является

C = []
for i in range(len(B)):
    C.append(A[B[i].idx])

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вы можете использовать понимание списка (осторожно с -1, потому что массив 0 проиндексирован):

a_sorted = [A[B[i].idx - 1] for i in range(len(B))]
print(a_sorted)

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

a_sorted = sorted(enumerate(A), key=lambda idx_val: B[idx_val[0]].idx)  # [(1, 2), (0, 1), (2, 3), (3, 4)]
a_sorted = list(map(itemgetter(1), a_sorted))  # [2, 1, 3, 4]
print(a_sorted)
0 голосов
/ 02 апреля 2020

Я бы создал pandas фрейм данных, затем использовал бы метод sort_values:

import pandas as pd
df = pd.DataFrame({'A':[a1,a2,a3,a4],'B': [b1.idx, b2.idx, b3.idx, b4.idx],'C':[a2, a1, a3, a4]})
df = df.sort_values(by = ['B'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...