Возвращает индекс первого совпадения начала символа/подстроки
Метод str.index() возвращает индекс первого совпадения начала подстроки sub в строке str , где подстрока или символ sub находится в пределах среза str[start:end] .
Работает аналогично методу строки str.find() , за исключением того, что бросает исключение ValueError , если символ или подстрока sub не найдены в строке str .
- Необязательные аргументы start и end интерпретируются как в нотации среза.
- Индекс подстроки считается всегда от начала строки, а не от начала среза, если конечно он указан.
- Метод бросает исключение ValueError , если символ или подстрока sub не найдены.
Обратите внимание, что метод str.index() следует использовать только в том случае, если вам нужно узнать положение подстроки sub в строке. Чтобы проверить, является ли sub подстрокой строки str , используйте оператор if . in
Примеры получения индекса первого совпадения символа/подстроки.
>>> x = 'раз два три раз два три раз' >>> x.index('раз') # 0 >>> x.index('раз', 1, 23) # 12 >>> x.index('четыре') # Traceback (most recent call last): # File "", line 1, in # ValueError: substring not found
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Метод str.capitalize(), первая буква в строке заглавная
- Метод str.casefold(), сворачивает регистр строки
- Метод str.center(), выравнивает строку по центру
- Метод str.count(), считает совпадения в строке
- Метод str.encode(), преобразует строку в байты
- Метод str.endswith(), совпадение с концом строки
- Метод str.expandtabs(), меняет табуляцию на пробел
- Метод str.find(), индекс первого совпадения в строке
- Метод str.format(), форматирует строку
- Метод str.format_map()
- Метод str.index(), индекс первого совпадения подстроки
- Метод str.isalnum(), строка состоит из цифр и букв
- Метод str.isalpha(), строка состоит только из букв
- Метод str.isascii(), все символы в строке являются ASCII
- Метод str.isdecimal(), проверяет строку на десятичное число
- Метод str.isdigit(), строка состоит только из цифр
- Метод str.isidentifier() проверяет строку на идентификатор Python
- Метод str.islower( ), проверяет строку на нижний регистр
- Метод str.isnumeric(), проверяет строку на числовые символы
- Метод str.isprintable(), проверяет на доступность для печати
- Метод str.isspace(), является ли строка пробелом
- Метод str.istitle(), проверяет наличие заглавных букв в словах
- Метод str.isupper(), проверяет строку на верхний регистр
- Метод str.join(), объединяет список строк
- Метод str.ljust(), ровняет строку по левому краю
- Метод str.lower(), строку в нижний регистр
- Метод str.lstrip(), обрезает символы в начале строки
- Метод str.maketrans(), таблица символов для str.translate()
- Метод str.partition(), делит строку по первому совпадению
- Метод str.removeprefix(), удаляет префикс строки
- Метод str.removesuffix(), удаляет суффикс строки
- Метод str.replace(), меняет подстроку/символ в строке
- Метод str.rfind(), индекс последнего совпадения подстроки
- Метод str.rindex(), индекс последнего совпадения в строке
- Метод str.rjust(), ровняет строку по правому краю
- Метод str.rpartition(), делит строку по последнему совпадению
- Метод str.rsplit(), делит строку справа
- Метод str.rstrip(), обрезает символы на конце строки
- Метод str.split(), делит строку по подстроке
- Метод str.splitlines(), делит текст по символу ‘\n’
- Метод str.startswith(), совпадение с началом строки
- Метод str.strip(), обрежет строку с обоих концов
- Метод str.swapcase(), сменит регистр символов в строке
- Метод str.title(), каждое слово с заглавной буквы
- Метод str.translate(), транслирование строки
- Метод str.upper(), переведет строку в верхний регистр
- Метод str.zfill(), дополнит строку нулями
- Форматирование строк в стиле printf
- F-string. Форматированные строки
Python | Как найти индекс символа в строке?
Короткий ответ — циклом. Что вы сами пробовали делать и что у вас не получилось? И определитесь, вам символ в строке нужно найти (как в заголовке) или подстроку в строке (как в самом вопросе)?
14 апр 2016 в 22:15
индекс символа простым циклом находится, но чтобы найти индекс подстроки существуют интересные алгоритмы, которые могут улучшить O(n*k) сложность для типичного ввода.
15 апр 2016 в 6:57
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Используйте index string.index(s, sub[, start[, end]]) — оффициальная документация
>>> myString = 'aaaaSbbb' >>> myString.index('S') 4
Отслеживать
ответ дан 16 апр 2016 в 1:14
Shepilov Vladislav Shepilov Vladislav
76 1 1 серебряный знак 5 5 бронзовых знаков
В вопросе явно указано «не используя find и index», так что ответ совсем не в тему.
16 апр 2016 в 13:29
Учтите, что нумерация будет идти с нуля
text='bla-bla-this-bla' subtext='a' result = [] flag = False n = 1 for i,element in enumerate(text): if flag: if n > len(subtext)-1: flag = False n = 1 elif element == subtext[n]: n += 1 elif element != subtext[n]: result = result[:-1] n = 1 flag = False if element == subtext[0] and not flag: flag = True result.append(i) for item in result: print('Вхождение с ' + str(item) + ' символа')
Отслеживать
ответ дан 14 апр 2016 в 23:45
RemiZOffAlex RemiZOffAlex
820 1 1 золотой знак 7 7 серебряных знаков 25 25 бронзовых знаков
if element == subtext[0]: можно убрать. Сложность алгоритма это не улучшает.
15 апр 2016 в 6:57
Нет, убрать нельзя, т.к. если Вы проанализируете алгоритм внимательнее, то заметите, что сравнивается только первый символ, а далее уже вся подстрока. При больших объёмах это будет серьёзная экономия времени и нагрузки на CPU.
15 апр 2016 в 7:47
*»Сложность алгоритма это не улучшает»*—если вы уберёте if element = subtext[0] , то сложность по прежнему будет O(n*m) . Если вы думаете, что на практике if element делает код быстрее, то это вероятно, но в этом случае следует указывать benchmark, который вы использовали для сравнения (конкретную реализацию (например, на pypy, я бы попробовал: for j, c in enumerate(subtext): if text[i + j] != c: break # unequal .. ), ожидаемый ввод (размер, частоты символов) итд).
Нахождение позиции символа в строке в Python
Часто при работе со строками в Python возникает необходимость определить позицию определенного символа или подстроки внутри строки. Например, имеется строка ‘Hello, World!’ и необходимо найти позицию символа ‘W’ в ней.
Python предоставляет несколько методов для работы со строками, которые помогут решить эту задачу.
Метод index()
Один из самых простых способов — использовать метод index() , который возвращает индекс первого вхождения указанного символа или подстроки. Например:
s = 'Hello, World!' pos = s.index('W')
В этом случае переменная pos будет содержать значение 7 , так как символ ‘W’ находится на позиции 7 (счет ведется с 0 ).
Если символ или подстрока отсутствуют в строке, метод index() вызовет исключение ValueError .
Метод find()
Еще одним способом является использование метода find() , который также возвращает индекс первого вхождения указанного символа или подстроки, но в отличие от метода index() , если символ или подстрока отсутствуют в строке, find() возвращает -1 , а не вызывает исключение.
Пример использования метода find() :
s = 'Hello, World!' pos = s.find('W')
В этом случае pos также будет равно 7 . Если бы символ ‘W’ отсутствовал в строке, pos был бы равен -1 .
Эти два метода являются основными инструментами для нахождения позиции символа или подстроки в строке в Python.
Как узнать индекс символа в строке python
12. Строки: индексы и срезы

13. Строки и их методы

14. Списки и операции над ними

15. Списки: индексы и срезы

16. Списки и их методы

17. Условный оператор if

18. Вложенный оператор if

19. Множественный выбор elif

20. Цикл while
>>> s="hello people" >>> s[0] 'h' >>> s[1] 'e' >>> s[6] 'p' >>> s[20] IndexError: string index out of range
Обращение по индексу
>>> s="hello people" >>> s[-1] 'e' >>> s[-4] 'o' >>> s[-20] IndexError: string index out of range
Обратная индексация
>>> s="hello people" >>> s[1]='a' TypeError: 'str' object does not support item assignment
Строка — неизменяемый объект
>>> s="hello people" >>> s[1:5] 'ello' >>> s[3:8] 'lo pe' >>> s[6:-1] 'peopl'
Взятие среза индексов
>>> s="hello people" >>> s[6:] 'people' >>> s[:4] 'hell' >>> s[:] 'hello people'
Взятие среза индексов 2
>>> s='Hasta la vista, baby' >>> s[1::2] 'at avsa ay' >>> s[1:8:3] 'aaa' >>> s[::-1] 'ybab ,atsiv al atsaH'
