Фильтрация веб-статей по ключевым словам внутри цикла - PullRequest
0 голосов
/ 01 февраля 2020

Я написал функцию для удаления веб-статей, но хочу адаптировать ее таким образом, чтобы она проверяла, подходит ли мне статья (на основе списка ключевых слов), и игнорирует ее, если это не так. Я нашел несколько способов проверить, находится ли строка внутри другой строки, но почему-то я не могу заставить их работать внутри for-l oop. Вот легкий пример функции:

combos = ['apple and pear', 'pear and banana', 'apple and peach', 'banana and kiwi', 'peach and orange']
my_favorites = ['apple', 'peach']
caps = []

for i in combos:

    for j in my_favorites:
        if j not in i:
            continue

    caps.append(i.upper())

print(caps)

Я хочу перейти к следующей итерации l oop, если хотя бы один из моих любимых фруктов не включен. Но все строки в списке проходят через фильтр:

['APPLE AND PEAR', 'PEAR AND BANANA', 'APPLE AND PEACH', 'BANANA AND KIWI', 'PEACH AND ORANGE']

Может кто-нибудь объяснить, пожалуйста, мою неудачу в понимании здесь?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2020

Вы добавляете верхний регистр элемента combos независимо от наличия в нем ключевых слов.

Использование continue влияет на внутренний l oop. Таким образом, вы перебираете весь список my_favorites и после завершения добавляете верхний регистр i к caps.

. Приведенный ниже код дает то, что вы хотите:

combos = ['apple and pear', 'pear and banana', 'apple and peach', 'banana and kiwi', 'peach and orange']
my_favorites = ['apple', 'peach']
caps = []

for i in combos:
    if any([fav in i for fav in my_favorites]):
        caps.append(i.upper())

print(caps)
0 голосов
/ 01 февраля 2020

Регулярные выражения я считаю лучшим способом фильтрации текста, особенно когда входные данные представляют собой обширный набор данных. Ниже я использовал python встроенный модуль re для компиляции требуемого шаблона и использовал функцию соответствия регулярному выражению для поиска в списке и сопоставления с шаблоном.

import re

combos = ['apple and pear', 'pear and banana', 'apple and peach', 'banana and kiwi', 'peach and orange']

my_favorites = ['apple', 'peach']

regex_pattern = "|".join(my_favorites)

r = re.compile(regex_pattern)

filtered_list = filter(r.match, combos)

caps = [item.upper() for item in filtered_list]
0 голосов
/ 01 февраля 2020

Вам необходимо добавить caps.append (i.upper ()) к условию else.

combos = ['apple and pear', 'pear and banana', 'apple and peach', 'banana and kiwi', 'peach and orange']
my_favorites = ['apple', 'peach']
caps = []

for i in combos:

    for j in my_favorites:
        if j not in i:
            continue
        else:
            caps.append(i.upper())

print(caps)
...