Сопоставление похожих элементов между двумя списками
Я новичок в Python, поэтому извинения, если это глупый вопрос.
У меня есть два спискаL1=['marvel','audi','mercedez','honda']
а также
L2=['marvel comics','bmw','mercedez benz','audi']
,
Я хочу извлечь соответствующие элементы, которые содержатся в list L2
в сочетании с list L1
, Итак, что я сделал:
for i in L1:
for j in L2:
if j in i:
print (j)
output is ['audi']
Но я также хочу вернуть элементы, если они также состоят из любого слова, например mercedez
в mercedez benz
а также marvel
в marvel comics
, итоговый результат будет:
j=['audi','mercedez benz','marvel comics']
6 ответов
Я думаю, что вы действительно хотите здесь, это элементы L2
которые содержат какие-либо элементы в L1
, Так просто замени if j in i
с if i in j
:
for i in L1:
for j in L2:
if i in j:
print (j)
Это выводит:
marvel comics
audi
mercedez benz
Если вы хотите использовать regular expressions
тогда вы можете сделать:
import re
re.findall(".*|".join(L1),"\n".join(L2))
['marvel comics', 'mercedez benz', 'audi']
Используя понимание списка:
[j for i in L1 for j in L2 if (j.startswith(i))]
['marvel comics', 'audi', 'mercedez benz']
Это один подход с использованием str.startswith
Пример:
L1=['marvel','audi','mercedez','honda']
L2=['marvel comics','bmw','mercedez benz','audi']
res = []
for i in L2:
for j in L1:
if i.startswith(j):
res.append(i)
print(res)
Выход:
['marvel comics', 'mercedez benz', 'audi']
С помощью in
Пример:
res = []
for i in L2:
for j in L1:
if j in i:
res.append(i)
print(res)
Эффективный подход заключается в построении "плоского" словаря с каждым словом в качестве ключа и соответствующей группой слов в качестве значения.
L2=['marvel comics','bmw','mercedes benz','audi']
match_dict = {k:v for v in L2 for k in v.split()}
который:
{'audi': 'audi',
'benz': 'mercedes benz',
'bmw': 'bmw',
'comics': 'marvel comics',
'marvel': 'marvel comics',
'mercedes': 'mercedes benz'}
Теперь просканируйте первый список и выдайте элемент if в словаре:
L1=['marvel','audi','mercedes','honda']
result = [match_dict[x] for x in L1 if x in match_dict]
результат:
['marvel comics', 'audi', 'mercedes benz']
как только словарь построен, вы можете сканировать большие списки с высокой производительностью (O(1)
уважать)
Сделайте некоторые изменения в вашем коде
for i in L2:
for j in L1:
if j in i:
print (i)