Упорядочить элементы подсписка через другой список

#python #python-3.x #list #variables

#python #python-3.x #Список #переменные

Вопрос:

Допустим, у меня есть следующие списки списков:

 lst=[['A'],['B'],['C'],['D']]
lst2=[['C','D','B'],['D','C'],['D','B','A']]
  

И мне нужно упорядочить каждый подсписок lst2 по порядку появления элементов из первого списка. Таким образом, lst2 в конечном итоге должно быть:

 Result=['B','C','D'],['C','D'],['A','B','D']]
  

Я знаю, что мог бы использовать циклы for, которые повторяют lst2 и сравнивают каждый элемент с элементом of lst , а затем создают новый список, который сохраняет каждый элемент всякий раз, когда они совпадают, но я хочу знать, есть ли более эффективный способ сделать это

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

1. Почему lst список состоит из одноэлементных списков?

Ответ №1:

Сначала выровняйте lst:

 lst = [e for ele in lst for e in ele]
  

Затем отсортируйте каждый элемент, используя lst.index в качестве ключа:

 lst2 = [sorted(i, key = lst.index) for i in lst2]
  

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

1. Хорошо с одной небольшой проблемой — вы предполагаете, что только один элемент в подсписке lst. таким образом, выравнивание не на 100% правильно

2. Верно, я действительно предполагал это. Я перешел на ваш flatten.

Ответ №2:

 lst=[['A'],['B'],['C'],['D']]
lst2=[['C','D','B'],['D','C'],['D','B','A']]

lst1 = [e for ele in lst for e in ele] # flatten the lst
Result = []
for arr in lst2:
    Result.append([ele for ele in lst1 if ele in arr])
  

Одно предположение, что у вас нет дубликатов в подсписке lst2