Как найти индекс символа в строке python
Перейти к содержимому

Как найти индекс символа в строке python

  • автор:

Возвращает индекс первого совпадения начала символа/подстроки

Метод 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?

Метод index() в Python помогает найти значение индекса элемента в последовательности. Он выдает наименьший возможный индекс указанного элемента. Если указанный элемент не существует, то возвращается ValueError.

sequence.index(x[, start[, end]]) 
  • sequence — это объект, элементы которого представляют собой некую индексированную последовательность (строка, список, кортеж). Каждый элемент последовательности имеет индекс — целое число, обозначающее его позицию в последовательности. Нумерация индексов начинается с 0 (нуля).
  • x — искомый элемент последовательности, чей наименьший индекс будет возвращен.
  • Необязательные аргументы start и end используются для ограничения поиска конкретной подпоследовательностью списка, путем задания среза. Возвращаемый индекс вычисляется относительно изначальной последовательности, а не среза, заданного start и end.
str_seq = 'aebcdef' #Последовательность в виде строки print(str_seq.index('e')) # => 1 print(str_seq.index('e', 2)) # => 5 print(str_seq.index('k')) # => ValueError: substring not found lst_seq = ['a', 'e', 'b', 'c', 'd', 'e', 'f'] #Последовательность в виде списка print(lst_seq.index('b')) # => 2 print(lst_seq.index('k')) # => ValueError: 'k' is not in list tup_seq = ('a', 'e', 'b', 'c', 'd', 'e', 'f') #Последовательность в виде кортежа print(tup_seq.index('a')) # => 0 

Методы строк для начинающих

У строк в Python есть множество полезных методов для того, чтобы дать возможность делать со строками различные полезные и нужные действия.

Методы похожи на функции, их тоже можно вызывать и, так же как и функции, они могут возвращать результат своей работы. Отличие же методов в том, что они привязаны к определенному типу данных и, например, методы строк могут быть вызваны только у строк.

Все методы строк можно посмотреть в нашем справочнике , а вот несколько примеров того, как вызывать методы строк.

string = "Hello world!"
print(string.lower()) # hello world!
print(string.upper()) # HELLO WORLD!

Начинающему программисту важно помнить, что методы не меняют исходную строку. Строки в Python вообще нельзя изменить. Если вы хотите поменять все ее символы, например, на символы нижнего регистра, нужно присвоить строке новое значение

string = "Hello world!"
string = string.lower()

Индексы строк ¶

Бывает так, что иногда появляется необходимость выбирать отдельные символы из строки. В Python для этого необходимо использовать квадратные скобки. В таблице ниже приведены примеры получения символа строки по индексу строки Python, помещенной в переменную string .

Код Результат Описание
s[0] P Первый символ
s[1] y Второй символ
s[-1] n Последний символ
s[-2] o Предпоследний символ

Как вы видите, необходимо учитывать, что номером индекса первого символа будет [0] Отрицательный индекс будет отсчитывать символы с конца строки. Распространенная ошибка: предположим, что мы пытаемся задать индекс s[12] . Но в примере выше мы имеем всего шесть элементов строки, и логично что Python выдаст ошибку следующего содержания:

IndexError: string index out of range

Срезы строк ¶

Срез используется для выделения части строки. Он состоит из индекса и диапазона. Ниже расположены несколько примеров со строкой

string = 'абвгдежзик'
0 1 2 3 4 5 6 7 8 9
а б в г д е ж з и к
Фрагмент кода Результат Описание
string[ 2 : 5 ] вгд Символы с индексом 2, 3, 4
string[ : 5 ] абвгд Первые пять символов
string[ 5 : ] ежзик Символы, начиная с индекса 5 и до конца
string[ -2 : ] ик Последние два символа
string[ : ] абвгдежзик Вся строка
string[1 : 7 : 2] бге Со второго по шестой символы, через один
string[ : : -1 ] кизжедгвба Обратный шаг, строка наоборот

Базовая структура среза выглядит следующим образом: Строка [начальный\_символ : конечный_символ + 1]

Срезы не включают явное расположение окончания строки. Например, в приведенном выше примере string[2:5] , Python выведет символы с индексами 2, 3 и 4, но не символ с индексом 5.

Мы можем оставить, вместо индекса начала или окончания строки, пустоту. Пустота на месте индекса начала будет по умолчанию равна нулю. Итак, string[:5] выведет первые пять символов строки string. А в случае string[5:] , Python покажет символы, начиная с индекса 5 и до конца строки. Если же использовать отрицательные индексы, мы получим символы с конца строки. Например, string[-2:] — это последние два символа.

Также существует необязательный третий аргумент, который указывает на шаг среза строки. Например, string[1:7:2] берет каждый второй символ из строки с индексом 1, 3 и 5.

Хотите выучить Python на практике?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *