Сравнение списков, поиск части элемента

Сравниваю два списка:

app_list = ['word', 'port']
    
new_list = ['word list', 'port world']
    
if any(x in app_list for x in new_list):
    print("Списки list1 и list2 имеют общие элементы")
else:
    print("Списки list1 и list2 не имеют общих элементов")

Результат:

Списки list1 и list2 не имеют общих элементов

Ищу 'word' в элементе второго списка 'word list':

app_list = ['*word*', 'port']
    
new_list = ['word list', 'port world']
    
if any(x in app_list for x in new_list):
    print("Списки list1 и list2 имеют общие элементы")
else:
    print("Списки list1 и list2 не имеют общих элементов")

Результат точно такой же:

Списки list1 и list2 не имеют общих элементов

Думал '*' любое количество любых символов.


Ответы (1 шт):

Автор решения: Amgarak

any(x in app_list for x in new_list):

Тут вы ищите строку в списке -> 'word' in ['word list', 'port world'] -> таким образом будет произведено сопоставление всех элементов списка со строкой 'word', что естественно вернёт False так как строки 'word' в списке нет.


Вам же нужно искать вхождение подстроки в строке -> 'word' in 'word list' -> True


Для приведения строки к нижнему регистру, можно воспользоваться методом .lower()

'Word'.lower() -> 'word' -> 'Word'.lower() in 'woRd list'.lower() -> True

Пример:

app_list = ['worD', 'port']
new_list = ['wOrd list', 'port World']

if any(app_string.lower() in new_string.lower() for app_string in app_list for new_string in new_list):
    print("Списки list1 и list2 имеют общие элементы")
else:
    print("Списки list1 и list2 не имеют общих элементов")

Вывод:

Списки list1 и list2 имеют общие элементы

[Program finished]
→ Ссылка