#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. Я только что обновил свой ответ. Отличный улов!