Как переупорядочить список, основанный на заказе другого списка? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть один список, который в определенном порядке, скажем, что-то вроде ['hello', 'I', 'like', 'sunshine'], и у меня есть второй список, который содержит весь первый список и некоторые дополнительные элементы ['You', 'like', 'pie', 'sunshine', 'and', 'rainbows', 'hello', 'I'].Это своего рода бессмысленный пример, но, по сути, основная идея заключается в том, что первый список является подмножеством второго, но элементы из первого не отображаются в том же порядке, в котором они изначально появились (они зашифрованы во второмсписок).Я хочу изменить порядок второго списка, чтобы он содержал элементы из первого списка в начале в исходном порядке, а затем имел свои уникальные элементы.Следовательно, этот переупорядоченный второй список будет выглядеть так: ['hello', 'I', 'like', 'sunshine', 'You', 'pie', 'and', 'rainbows'].

Надеюсь, это имеет смысл.На самом деле мне все равно, как уникальные элементы появляются в окончательном переупорядоченном списке (их можно переставить для меня, но важно, чтобы элементы из первого списка появлялись в начале и сохраняли первоначальный порядок).Как мне этого добиться?Я немного растерялся.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вот хорошее однострочное решение:

a = ['hello', 'I', 'like', 'sunshine']
b = ['You', 'like', 'pie', 'sunshine', 'and', 'rainbows', 'hello', 'I']

b = sorted(b, key=lambda x: a.index(x) if x in a else len(a) + b.index(x))
# b = ['hello', 'I', 'like', 'sunshine', 'You', 'pie', 'and', 'rainbows']
0 голосов
/ 15 февраля 2019

Вы можете взять List1 и добавить каждый элемент из List2, отсутствующий в List1, в List1.

l1 = ['hello', 'I', 'like', 'sunshine']
l2 = ['You', 'like', 'pie', 'sunshine', 'and', 'rainbows', 'hello', 'I']

new_list = l1.copy()

for item in l2:
    if item not in l1:
        new_list.append(item)

print(new_list)

Out:

['hello', 'I', 'like', 'sunshine', 'You', 'pie', 'and', 'rainbows']
...