Сортировать дочерний список родительского списка по порядку родительского списка в python - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь отсортировать дочерний список родительского списка по порядку родительского списка, используя Python.

parent_list = ['a', 'b', 'c', 'd', 'e', 'f']
child_list = ['e', 'd', 'b']

Ожидаемый результат:

child_list = ['b', 'd', 'e']

Я пробовал, как показано ниже:

child_list.sort(key = lambda i: parent_list.index(i))

Ошибка:

ValueError: 'a' is not in list

1 Ответ

2 голосов
/ 13 июля 2020

Хотя опубликованный вами код работает (если он дает вам ошибку, вы должны использовать другой код или другие данные), он неэффективен: родительский список необходимо искать от начала до (потенциально) конца для каждого элемента в дочерний список. Это не имеет значения для такого короткого списка, но когда длина этих списков исчисляется тысячами, вы можете начать это замечать.

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

>>> indices = {i: e for e, i in enumerate(parent_list)}
>>> indices
{'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5}
>>> child_list.sort(key = lambda e: indices[e])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...