Как удалить список слов из списка строк

Извините, если вопрос немного запутан. Это похоже на этот вопрос

Я думаю, что вышеупомянутый вопрос близок к тому, что я хочу, но в Clojure.

Есть еще один вопрос

Мне нужно что-то вроде этого, но вместо «[br]» в этом вопросе есть список строк, которые нужно искать и удалять.

Надеюсь, я поняла.

Я думаю, что это связано с тем, что строки в python неизменяемы.

У меня есть список шумовых слов, которые нужно удалить из списка строк.

Если я использую понимание списка, я в конечном итоге снова и снова повторяю одну и ту же строку. Таким образом, удаляется только «из», а не «the». Поэтому мой измененный список выглядит так

places = ['New York', 'the New York City', 'at Moscow' and many more] noise_words_list = ['of', 'the', 'in', 'for', 'at'] for place in places: stuff = [place.replace(w, "").strip() for w in noise_words_list if place.startswith(w)] 

Я хотел бы знать, какую ошибку я делаю.

  • Django - как получить содержимое тега {% block%} из шаблона
  • Регулярное выражение Python, соответствующее свойствам Unicode
  • PyCharm и фильтры для внешних инструментов
  • Естественная сортировка Python
  • Как сравнить версии Rpm в python
  • Python regex - r префикс
  • Использование регулярного выражения для запятой выделяет большое количество в системе нумерации южной Азии
  • Регулярное выражение Python для соответствия escape-последовательностям VT100
  • 4 Solutions collect form web for “Как удалить список слов из списка строк”

    Вот мой удар. Это использует регулярные выражения.

     import re pattern = re.compile("(of|the|in|for|at)\W", re.I) phrases = ['of New York', 'of the New York'] map(lambda phrase: pattern.sub("", phrase), phrases) # ['New York', 'New York'] 

    Sans lambda :

     [pattern.sub("", phrase) for phrase in phrases] 

    Обновить

    Исправьте ошибку, указанную gnibbler (спасибо!):

     pattern = re.compile("\\b(of|the|in|for|at)\\W", re.I) phrases = ['of New York', 'of the New York', 'Spain has rain'] [pattern.sub("", phrase) for phrase in phrases] # ['New York', 'New York', 'Spain has rain'] 

    @prabhu: вышеупомянутое изменение позволяет избежать отскока от « в » от «Испания». Чтобы проверить запуск обеих версий регулярных выражений по фразе «Испания имеет дождь».

    Без regexp вы можете сделать следующее:

     places = ['of New York', 'of the New York'] noise_words_set = {'of', 'the', 'at', 'for', 'in'} stuff = [' '.join(w for w in place.split() if w.lower() not in noise_words_set) for place in places ] print stuff 
     >>> import re >>> noise_words_list = ['of', 'the', 'in', 'for', 'at'] >>> phrases = ['of New York', 'of the New York'] >>> noise_re = re.compile('\\b(%s)\\W'%('|'.join(map(re.escape,noise_words_list))),re.I) >>> [noise_re.sub('',p) for p in phrases] ['New York', 'New York'] 

    Поскольку вы хотели бы знать, что вы делаете неправильно, эта строка:

     stuff = [place.replace(w, "").strip() for w in noise_words_list if place.startswith(w)] 

    имеет место, а затем начинает перебирать слова. Сначала он проверяет «из». Ваше место (например, «Нью-Йорк») проверяется, чтобы узнать, начинается ли оно с «из». Он преобразуется (вызов для замены и разметки) и добавляется в список результатов. Решающее значение здесь заключается в том, что результат никогда не рассматривается снова. Для каждого слова, которое вы перебираете в понимании, новый результат добавляется в список результатов. Итак, следующее слово «the», и ваше место («из Нью-Йорка») не начинается с «the», поэтому новый результат не добавляется.

    Я предполагаю, что в итоге вы получили конкатенацию ваших переменных места. Проще всего читать и понимать процедурные версии будут (непроверенные):

     results = [] for place in places: for word in words: if place.startswith(word): place = place.replace(word, "").strip() results.append(place) 

    Имейте в виду, что replace() удалит слово в любом месте строки, даже если оно встречается как простая подстрока. Вы можете избежать этого, используя регулярные выражения с шаблоном, похожим на ^the\b .

    Python - лучший язык программирования в мире.