фильтровать список по условию, используя python - PullRequest
0 голосов
/ 29 апреля 2019
def myFunction(cond_list, input_list):
    res = []
    data = list(set(input_list))  # filter duplicate elements
    for i in cond_list:
        for j in data:
            if i in j:
                res.append(i)
    return res

cond = ['cat', 'rabbit']  
input_list = ['', 'cat 88.96%', '.', 'I have a dog', '', 'rabbit 12.44%', '', 'I like tiger']
result = myFunction(cond_list=cond, input_list=input_list)
print(result)  # the input list have: ['cat', 'rabbit']

У меня есть функция. Есть ли лучший способ изменить мою функцию в соответствии с условиями?

Ответы [ 4 ]

1 голос
/ 29 апреля 2019

Вы можете использовать itertools.product для генерации пар для сравнения:

>>> product = itertools.product(cond, input_list)
>>> [p for (p, q) in product if p in q]
['cat', 'rabbit']
1 голос
/ 29 апреля 2019

Если я вас правильно понимаю, это то, что вы ищете?

cond = ['cat', 'rabbit']  # filter duplicate elements
input_list = ['', 'cat 88.96%', '.', 'dog 40.12%', '', 'rabbit 12.44%', '', 'tiger 85.44%']
[i for i in cond for j in input_list if i in j]

['кошка', 'кролик']

0 голосов
/ 29 апреля 2019

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

Ex:

import re

def myFunction(cond_list, input_list):
    data = set(input_list)  # filter repeat element
    pattern = re.compile("|".join(data))
    return [i for i in cond_list if pattern.search(i)]

cond = ['cat', 'rabbit']  # filter duplicate elements
input_list = ['', 'cat 88.96%', '.', 'dog 40.12%', '', 'rabbit 12.44%', '', 'tiger 85.44%']
result = myFunction(cond_list=cond, input_list=input_list)
print(result)

Выход:

['cat', 'rabbit']
0 голосов
/ 29 апреля 2019
cond = ['cat', 'rabbit']  # filter duplicate elements
input_list = ['', 'cat 88.96%', '.', 'dog 40.12%', '', 'rabbit 12.44%', '', 'tiger 
85.44%']
matching = list(set([s for s in input_list if any(xs in s for xs in cond)]))

for i in matching: 
   print(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...