Как проверить, совпадает ли элемент в списке с другим элементом в списке строк?

Списки ввода

list1 = ['Google', 'Stanford University', 'Karlsruhe Institute of Technology (KIT) / University of Karlsruhe (TH)', 'AU-KBC Research Centre']
exclusion_list = ['university','institute','school','University','Institute','School']

Выходной список

output=['Google','AU-KBC Research Centre']

На выходе должны быть только те элементы, которые не содержат слов (элементов) из exclusion_list Я искал все SO. Но ни один из них не дает ответа конкретно на эту проблему. Я пробовал использовать filter(), а также глупую функцию. Но я ищу решение без грубой силы. Кроме того, мне любопытно дополнительное решение, которое использует регулярное выражение для решения проблемы.

В принципе

Я ищу оптимальный способ удалить любой университет, школу или институт из list1

EDIT: I want to preserve the order of the list as well. I apologize for not making this point clear.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
851
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Для эффективного решения вы можете использовать sets здесь. Определите exclusion_list как set и используйте понимание списка, чтобы проверить принадлежность каждого слова в list1:

list1 = ['Google', 'Stanford University',
         'Karlsruhe Institute of Technology (KIT) / University of Karlsruhe (TH)', 
         'AU-KBC Research Centre']

# define a set from the exclusion_list
exclusion_list = set(['university','institute','school','University','Institute','School'])

[i for i in list1 if not set(i.split()).intersection(exclusion_list)]
# ['Google', 'AU-KBC Research Centre']

Если вы добавите i.lower().split() в условие, вам потребуются только слова нижнего регистра в списке исключений.

Richard Nemeth 30.05.2019 12:37

Мы можем сделать что-то вроде следующего:

out = []
excl = set(exclusion_list)
for item in list1:
    for word in item.split():
        if word in excl:
            break
    else:
        out.append(item)
import pandas as pd
k = pd.Series(['Google', 'Stanford University', 'Karlsruhe Institute of Technology (KIT) / University of Karlsruhe (TH)', 'AU-KBC Research Centre'])
k[~k.str.contains('|'.join(exclusion_list))].tolist()    

Один лайнер:

[s for s in list1 if not any(e in s.lower() for e in exclusion_list)]

Аналогично возможно с фильтром, как вы упомянули:

list(filter(lambda s: not any(e in s.lower() for e in exclusion_list), list1))
Ответ принят как подходящий

Попробуй это.

list1 = ['Google', 'Stanford University', 'Karlsruhe Institute of Technology (KIT) / University of Karlsruhe (TH)', 'AU-KBC Research Centre']
exclusion_list = ['university','institute','school','University','Institute','School']
exclusion_list = [i.lower() for i in exclusion_list]
for i in list1:
    if not any(map(lambda x:x in i.lower(), exclusion_list)):
        print(i)

Этот ответ более читабелен и сохраняет порядок! Спасибо!

Sssssuppp 31.05.2019 04:04

Попробуй это:

[name  for name in list1 if not any(x.lower() in name.lower() for x in set(exclusion_list)) ]

Другие вопросы по теме