@Nazarius

Как узнать индекс слова в строке если они повторяются?

Пример строки:
TEXT = """
The Zen of Python, by Tim Peters
1. Beautiful is better than ugly.
2. Explicit is better than implicit.
3. Simple is better than complex.
4. Complex is better than complicated.
"""


Пример конечного вывода:
TEXT_WORDS = [
        ('the', 1), ('zen', 5), ('of', 9), ('python', 12), ('by', 20),
        ('tim', 23), ('peters', 27), ('beautiful', 37), ('is', 47),
        ('better', 50), ('than', 57), ('ugly', 62), ('explicit', 71),
        ('is', 80), ('better', 83), ('than', 90), ('implicit', 95),
        ('simple', 108), ('is', 115), ('better', 118), ('than', 125),
        ('complex', 130), ('complex', 142), ('is', 150), ('better', 153),
        ('than', 160), ('complicated', 165),
    ]

Я делал через через кортежи и метод index(), но если есть повторы то выводиться ('is', 47) и так 4 раза(потому что в тексте 4 встречается слово "is" )
Пример моего кода:
TEXT_WORDS = []
    for word in TEXT.split():
        r = (word, TEXT.index(word))
        TEXT_WORDS.append(r)
  • Вопрос задан
  • 684 просмотра
Решения вопроса 1
0xD34F
@0xD34F
Вторым параметром метод index позволяет указать, с какой позиции надо начинать поиск. Указывайте последний результат + длину последнего слова:

TEXT_WORDS = []
index = 0
for word in TEXT.split():
  index = TEXT.index(word, index)
  TEXT_WORDS.append((word, index))
  index += len(word)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
IDzone-x
@IDzone-x
Костыли сила паттерны могила
def get_indices(lst, el):
    return [i for i in range(len(lst)) if lst[i] == el]
    
    
print(get_indices([1, 5, 5, 2, 7], 7))

Возьмите на заметку етот код он возвращает индексы всех вхождений в второго аргумента. Думаю вы сможете переделать эво под свои нужды).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы