применить пользовательскую функцию к списку списков в python - PullRequest
0 голосов
/ 12 апреля 2020

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

ЭТО ОРИГИНАЛЬНЫЙ СПИСОК:

list_orig = [['summary of the', 'cold weather', 'bother me over high'], ['what is in a name?', 'reveals a lot', 'juniper relationship']]

ХОЧУ ПРИМЕНИТЬ ЭТОТ ПОИСК КЛЮЧЕВОГО СЛОВА:

keywords = ['summary', 'indicates','suggesting', 'relationship', 'reveals']

РЕЗУЛЬТАТ:

list_refine = [['summary of the'], ['reveals a lot', 'juniper relationship']]

Пока у меня есть код для применения к одному списку, но я не знаю, как искать это по всем спискам. Вот код для одного списка:

string1 = list_orig
substr1 = keywords

def Filter(string, substr): 
    return [str for str in string if
             any(sub in str for sub in substr)] 

print(Filter(string1, substr1))

Вот результат для 1 списка:

['summary of the']

Я исследовал множество способов l oop по спискам списков. Вот 1 попытка.

for item in string3:
     new.append([])
     for item in items:
        item = Filter(string1, substr1)
        new[-1].append(item)
item

только что получил пустой список Спасибо всем! Цени это :)

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Вы можете использовать a для l oop для итерации по списку и другое для l oop для итерации по таким элементам и ключевым словам, как это,

list_orig = [['summary of the', 'cold weather', 'bother me over high'], ['what is in a name?', 'reveals a lot', 'juniper relationship']]

keywords = ['summary', 'indicates','suggesting', 'relationship', 'reveals']

list_refine = []

for l_inner in list_orig:
    l_out = []
    for item in l_inner:
        for word in keywords:
            if word in item:
                l_out.append(item)
    list_refine.append(l_out)
print(list_refine) # [['summary of the'], ['reveals a lot', 'juniper relationship']]
0 голосов
/ 12 апреля 2020

Вот альтернативное решение без явных циклов

list_orig = [['summary of the', 'cold weather', 'bother me over high'], ['what is in a name?', 'reveals a lot', 'juniper relationship']]

def contains_keyword(sentence):
    keywords = ['summary', 'indicates','suggesting', 'relationship', 'reveals']
    return any([(kw in sentence) for kw in keywords])

list_refine = [
    (sentence for sentence in lst if contains_keyword(sentence))
    for lst in list_orig
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...