Не работает для фраз из нескольких слов, потому что вы использовали split
. Поскольку он разделяется на пробелы (по умолчанию), логически не останется ни одного элемента , содержащего пробел.
Вы можете использовать in
немедленно, чтобы проверить, содержит ли определенная строка любую другую:
>>> sentence = "Given that I want to become an entrepreneur, I am wondering what collage to attend."
>>> identifiers = ['I am', 'I can', 'I will']
>>> for i in identifiers:
... if i in sentence:
... print (sentence[sentence.index(i):])
...
I am wondering what collage to attend.
Ваша попытка any([x in sentence for x in identifiers])
для этих строк показывает
[True, False, False]
и, хотя он дает некоторый полезный результат, но все же не индекс, для его печати потребуется еще один цикл для этого результата. (И часть any
не нужна, если только вы конкретно и не хотите знать , если предложение содержит такую фразу.)
Но понимание списка [x in sentence ..]
дает только список True
и False
, с которым вы ничего не можете сделать, так что это тупик.
Но он предлагает альтернативу:
>>> [sentence.index(x) for x in identifiers if x in sentence]
[45]
, что приводит нас к списку результатов:
>>> [sentence[sentence.index(x):] for x in identifiers if x in sentence]
['I am wondering what collage to attend.']
Если вы добавите 'I want'
в свой список идентификаторов, вы все равно получите правильный результат, теперь состоящий из двух фрагментов предложения (оба вплоть до конца):
['I am wondering what collage to attend.', 'I want to become an entrepreneur, I am wondering what collage to attend.']
(Ради интереса и пока я в этом: если вы хотите обрезать лишнее в первой запятой, добавьте регулярное выражение, которое соответствует всему , за исключением запятой:
>>> [re.match(r'^([^,]+)', sentence[sentence.index(x):]).groups(0)[0] for x in identifiers if x in sentence]
['I am wondering what collage to attend.', 'I want to become an entrepreneur']
Не берите в голову часть groups(0)[0]
в конце этого регулярного выражения, просто приведите объект SRE_Match обратно в обычную строку.)