Это довольно простое (ну, простое для Python) понимание списка:
[[1 if keyword in sequence else 0 for keyword in keywords] for sequence in sequences]
Следующая полная программа показывает это в действии:
sequences = [
['okay', ''],
['ahead', 'fred', ''],
['i', 'dont', 'remember', 'you', 'want', 'to', 'go', ''],
['um', ''],
['let', 'me', 'think', '']
]
keywords = ['i', 'you', 'we']
print([[1 if keyword in sequence else 0 for keyword in keywords] for sequence in sequences])
Как и ожидалось, Вывод:
[[0, 0, 0], [0, 0, 0], [1, 1, 0], [0, 0, 0], [0, 0, 0]]
Обратите внимание, что это основано на вашем "где 0 означает, что ключевое слово отсутствовало, а 1 означает, что оно было" текстом, то есть оно не обслуживает одно и то же слово, появляющееся дважды. Если вы продублируете i
в третьей последовательности, вы все равно получите 1
в этой позиции, а не 2
.
Если вам нужен фактический счет вместо 0/1
индикатор присутствия (на основе вашего текста «подсчитывает вхождение»), он немного сложнее, но все еще использует ту же основную c идею:
[[sum([1 if keyword == word else 0 for word in sequence]) for keyword in keywords] for sequence in sequences]
Дублирование i
в третьем Затем последовательность доставит вам:
[[0, 0, 0], [0, 0, 0], [2, 1, 0], [0, 0, 0], [0, 0, 0]]