2016-06-13 4 views
1

Я хотел бы знать, как я могу легко создать список на основе значений/порядка двух других списков:Сортировка списка на основе шаблона

list_a = ['web1','web2','web3','web1','web4'] 
list_b = ['web2','web4','web1','web5','web1'] 

я хотел бы получить список «list_b» упорядоченный по значению с «list_a»:

final = ['web1','web2','web1','web4','web5'] 

Если запись существует на list_b, но не на list_a, то значение добавляется к списку в конце.

Я не уверен, с чего начать, мое первоначальное мышление состояло в том, чтобы извлечь все индексы с перечислением [i for i, x in enumerate(mylist) if x==value], а затем отсортировать список, но мне сложно управлять записями с индексом multiples (например, web1). Просто интересно, если вы, ребята, думаете о том, как легко достичь этого?

+1

«Я хочу получить список« list_b », упорядоченный по значению из« list_a »:« - можете ли вы предоставить дополнительную информацию об этом? – SilentMonk

+3

Я не понимаю ваш механизм сортировки - как вы определяете, какое значение есть где? – Krease

+0

Просто перебирайте через list_a запрос, если элемент в list_a в list_b, добавьте его в окончательный третий список при удалении совпадающего элемента из list_b. Затем добавьте оставшееся содержимое list_b в конце финала? Что вы получите путем сортировки списка? –

ответ

1

Очень простой способ состоял бы в том, чтобы просто перебрать list_a, и если вы найдете каждый элемент в list_b, вы удалите его и добавьте в список. Затем после итерации все, что осталось в list_b, являются элементами, которые необходимо добавить в конец списка.

list_a = ['web1','web2','web3','web1','web4'] 
list_b = ['web2','web4','web1','web5','web1'] 

front = [] 
for ele in list_a: 
    if ele in list_b: 
     front.append(ele) 
     list_b.remove(ele) 

final = front + list_b 
print(final) 

Выходы:

['web1', 'web2', 'web1', 'web4', 'web5'] 

Еще сложнее всего было бы использовать collections.Counter и несколько списковых, используя множество пересечения и разности счетчиков.

from collections import Counter 

cnt_a, cnt_b = Counter(list_a), Counter(list_b) 
intersct = (cnt_a & cnt_b) 
diff = (cnt_b - cnt_a) 

final = [a for a in list_a if a in intersct] + [b for b in list_b if b in diff] 
Смежные вопросы