Python: соответствие строки в разных условиях - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть 4 списка:

string1=['I love apple', 'Banana is yellow', "I have no school today", "Baking pies at home", "I bought 3 melons today"]
no=['strawberry','apple','melon', 'Banana', "cherry"]
school=['school', 'class']
home=['dinner', 'Baking', 'home']

Я хочу знать, что все строки в строке1 принадлежат к какой группе, если строка о фруктах, а затем проигнорируйте ее, если строка о школе и доме, напечатайте их.

Результат, который я ожидал:

I have no school today
school
Baking pies at home
Baking #find the first match

Вот мой код, он напечатал что-то, что я хочу, но со многими повторяющимися значениями:

for i in string1:
    for j in no:
        if j in i:
            #print(j)
            #print(i)
            continue
        for k in school:
            if k in i:
                print(i)
                print(k)
            for l in home:
                if l in i:
                    print(i)
                    print(l)

Я знаю, что это не эффективный способ найти совпадение. Если у вас есть предложения, пожалуйста, дайте мне знать. Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы можете сделать это с помощью комбинации any и filter.Мы используем any, чтобы игнорировать строки, в которых встречается слово в no.В противном случае мы находим соответствие, используя filter:

string1 = ['I love apple', 'Banana is yellow', "I have no school today", "Baking pies at home", "I bought 3 melons today"]
no = ['strawberry', 'apple', 'melon', 'Banana', "cherry"]
school = ['school', 'class']
home = ['dinner', 'Baking', 'home']

for s in string1:
    if not any(x in s for x in no):
        first_match = list(filter(lambda x: x in s, school + home))[0]
        print(s)
        print(first_match)

Выход

I have no school today
school
Baking pies at home
Baking
0 голосов
/ 08 ноября 2018

Предполагается, что вы пытаетесь проверить, есть ли в каком-либо из списков no, school и home слово в любой из строк в string1.

Я бы просто объединял списки no, school и home вместе, тогда просто делал бы

for string in string1:
    for word in all3lists:
        if word in string:
            print("{0}\n{1}".format(string, word))

Надеюсь, что это поможет, я не в состоянии проверить это, но это моя лучшая ставка без проведения теста, чтобы проверить, работает ли это:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...