#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