Как узнать список всех позиций слова в тексте python? Jupyter Notebook

Изучили следующее: text1.index("monstrous") Можем определить позицию когда первый раз встречается слово

list_numbers = [3, 1, 2, 3, 3, 4, 5, 6, 3, 7, 8, 9, 10] [i for i, n in enumerate(list_numbers) if n == 3 Можем использовать генерацию списков (list comprehension), чтобы узнать позиции совпадений в списке. А как сделать так, чтобы список всех позиций слова в тексте выводилось?


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

.index() очень похож на .find(), с одной разницей: find возвращает -1, если не находит подстроку, а index выдает ошибку.

Оба имеют еще два необязательных аргумента: .find(подстрока[, от_позиции[, до_позиции]])

string = 'aaa aaa aaa aaa'
search = 'aaa'

L = []; index = 0

while True:
    index = string.find(search, index) # <-- можно указывать начальную позицию поиска
                                       # (предыдущий индекс + длина искомой подстроки)
    if index == -1: break

    L.append(index)
    index += len(search)

print( L ) # [0, 4, 8, 12]

Есть более компактный вариант, через модуль re:

import re

string = 'aaa aaa aaa aaa'
search = 'aaa'

L = [ match.start() for match in re.finditer(search, string) ]

print( L ) # [0, 4, 8, 12]
→ Ссылка