сортировка списка объектов по значениям атрибутов, порядок значений атрибутов находится в другом списке

#python #python-3.x #sorting

#python #python-3.x #сортировка

Вопрос:

 a = ['123b4', '234v5', 'lobf56']
b = [obj1, obj2, obj3] # where each obj is list of object which has attribute called 'serial' which matches serial numbers in list #a
  

Где obj1.serial равен 234v5, obj2.serial равен lobf56, а obj3.serial равен 123b4

 tmplist=list()
for each in a:
    for obj in b:
        if each == obj.serial:
            tmplist.append(obj)

print(tmplist)
  

вывод: [obj3, obj1, obj2]

В настоящее время я могу выполнить сортировку вышеуказанным способом. Но есть ли лучший способ сделать это?

Комментарии:

1. Я добавил ответ на ваш вопрос.

Ответ №1:

Помогает ли понимание списка?

 [obj for each in a for obj in b if each == obj.serial]
  

Если вы сравните время между обоими, ваш подход займет:

 1.6 µs ± 25.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
  

Понимание списка занимает:

 1.37 µs ± 18.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
  

Поэтому, если под «лучшим способом сделать это» вы подразумеваете эффективность. Это определенно имеет значение.

Комментарии:

1. Какой код точно вы засекли? Мне просто любопытно, потому что разрыв обычно не такой большой.

2. @Tomothy32, ты прав. Я допустил ошибку, включив инструкцию print. Я только что обновил свой ответ. Отличный улов!