Как извлечь список из списка, сопоставив одно значение во внешнем списке, в Python?

#python #list #loops #indexing #linked-list

Вопрос:

Мои данные представляют собой большой (связанный) список, состоящий из меньших списков (7500 ). И в этих меньших списках существует другой список со строками в качестве их значения. Список A <— Список B

 List_A = [['123', 'Hello World', '2020', ['john', 'mike', 'edgar'], 'N'],
          ['124', 'Hello Universe', '2021', ['harold', 'jessica', 'ashley'], 'Y'],
          ['125', 'Hello Milkyway', '2020', ['maria', 'tessa', 'rodrigo'], 'N']]

List_A.nodeat(0).value[3]
>>>> ['john', 'mike', 'edgar']

Outside this large list, I've created a string split list of names:
List_Outside = ['mike', 'maria']. 
 

Я хочу создать новый список (List_A_2) только из списка B, у которого есть хотя бы одно совпадающее имя из List_Outside в списке C.

Таким образом, List_A_2 будет выглядеть так:

 List_A_2 = [['123', 'Hello World', '2020', ['john', 'mike', 'edgar'], 'N'],
           ['125', 'Hello Milkyway', '2020', ['maria', 'tessa', 'rodrigo'], 'N']]
 

Конечно, я хотел бы, чтобы это было применимо для списков 7500 , поэтому мне нужно было бы использовать индексы в цикле for. Заранее спасибо.

Ответ №1:

Вы можете использовать any() для фильтрации списка:

 List_A_2 = [l for l in List_A if any(w in List_Outside for w in l[3])]
print(List_A_2)
 

С принтами:

 [['123', 'Hello World', '2020', ['john', 'mike', 'edgar'], 'N'], 
['125', 'Hello Milkyway', '2020', ['maria', 'tessa', 'rodrigo'], 'N']]