Как найти индекс следующей похожей буквы в строке

a = "programming in python is Fun"

a.find("i") = 8

Он возвращает индекс первого вхождения "i" в a.
Можно ли найти индекс второго "i"?


person sunit patil    schedule 03.02.2021    source источник
comment
Да, посмотрите на поведение индексного метода. docs.python.org/3/library/   -  person lllrnr101    schedule 03.02.2021


Ответы (3)


find() также принимает необязательный начальный индекс, который вы можете использовать как:

a = "programming in python is Fun"
first = a.find('i')
print(a.find('i',first+1))
person Krishna Chaurasia    schedule 03.02.2021

Вы можете использовать enumerate() с понимание списка, чтобы найти все индексы следующим образом:

s = "programming in python is Fun"
my_char = "i"

my_indexes = [i for i, x in enumerate(s) if x == my_char]
# where `my_indexes` holds:
#    [8, 12, 22]

Здесь my_char — это символ, индекс которого вы хотите найти. А my_indexes — это список, содержащий индексы каждого случая, когда my_char встречается в строке. Дополнительные сведения см. в enumerate() документе.

Следовательно, вы можете получить доступ к индексу второго вхождения как:

>>> my_indexes[1]
12
person Anonymous    schedule 03.02.2021
comment
тот очень крутой. вероятно, не так быстро, как .find() на бумаге, но алгоритм лучше имхо. Если позволите, удалите это , x in enumerate, ì for i in s вполне подойдет, строка — это просто список символов. - person Loïc; 03.02.2021

Вы также можете использовать numpy следующим образом:

import numpy as np
a = "programming in python is Fun"
x = np.frombuffer(a.encode(), dtype=np.uint8)
np.where(x == ord('i')) # (array([ 8, 12, 22]),)

Используя np.frombuffer, переинтерпретируйте str как символьный буфер, а затем используя < a href="https://numpy.org/doc/stable/reference/generated/numpy.where.html" rel="nofollow noreferrer">np.where вернет все индексы, которые будут соответствовать вашему персонажу интересует (или, точнее, целое число, представляющее символ Unicode, используя ord< /а>).

person David    schedule 03.02.2021
comment
не тяжело ли загружать numpy для этой задачи? - person Loïc; 03.02.2021
comment
@Loïc Это может быть излишним, но если у вас очень длинная строка, я думаю, это будет быстро. Конечно, я также хотел дать какой-то другой подход к данному. - person David; 03.02.2021