Здесь у меня есть два списка:
list1 = ['2C535EB58F19B58' , '7B89D9071EB531B143594FF909BAC846' , '0509']
list2 = ['1641AB0C9C5B8867' , '0098968C' , '509']
Мне нужно сравнить элементы внутри списка2 с элементами list1.
Я хочу, чтобы результат был, после сравнения:
509
поскольку 509 присутствует в 0509.
Как я могу достичь этого? Может ли регулярное выражение помочь мне в этом?
Попробуйте это: здесь мы проверяем, является ли элемент в списке2 подстрокой элемента в списке1.
list1 = ['2C535EB58F19B58' , '7B89D9071EB531B143594FF909BAC846' , '0509']
list2 = ['1641AB0C9C5B8867' , '0098968C' , '509']
for i, j in zip(list1, list2):
if j in i:
print(j)
Однострочный, который будет добавлен в список:
print( [j for i, j in zip(list1, list2) if j in i])
Могут быть более простые и лучшие ответы. Если это поможет, вы можете это сделать.
for x in list2:
for y in list1:
if x in y:
print x #or whatever
вложенные for-loops, я думаю, что это простой способ, но я уверен, что есть лучший
Как уже было предложено BearBrown в комментарии, есть простой способ достичь своей цели. Нет никаких оснований думать о регулярных выражениях вообще (in
-operator достаточно мощный).
[x for x in list2 if any(y for y in list1 if x in y)]
Здесь вы ищете каждую строку x
в списке2, если она является подстрокой любой строки y
в списке1 и, наконец, сохраняет каждую соответствующую подстроку x
в новом списке.
Вы можете сделать что-то вроде этого:
common_elements = []
for x in list1:
for y in list2:
if y in x:
common_elements.append(y)
common_elements
будет содержать common_elements
элементы.
Вы можете просто использовать in
python для проверки того, находится ли одна строка в другой строке.
Самый простой способ решить вашу проблему -
[y for y in list2 if any(y in x for x in list1)]
res
для результатов, переберитеlist1
иlist2
и проверьте с помощью оператораif
для членства (in
). ЕслиTrue
append
res
.[x for x in list2 if any(y for y in list1 if x in y)]
?