Определение позиции символа в строке: Python способы индексации

Раздел: Строки -> Строки

Номер символа в строке Python: способы получения индекса

Наиболее часто используемый способ найти номер (индекс) первого вхождения символа или подстроки в строке - метод find(). Он возвращает индекс начала совпадения или -1, если элемент не найден. Это безопаснее, чем index(), который при отсутствии символа выбрасывает исключение ValueError.

text = 'Привет, мир!'
position = text.find('м')
print(position)  # 8

Python strip (метод strip в python)

8

Python повторить строку (повторение строки в python)

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

text = 'Python'
pos = text.find('z')
print(pos)  # -1

Tuple в str python (преобразование кортежа в строку в python)

-1

Python объект в строку (преобразование объекта в строку в python)

Частая ошибка - путать методы find() и index(). Если символ отсутствует, index() вызовет исключение. Для проверки наличия символа перед index() следует использовать оператор in:

text = 'abc'
if 'd' in text:
    print(text.index('d'))
else:
    print('Символ не найден')

Python convert string (преобразование строк в python)

Как найти все вхождения символа в строке?

Для получения списка индексов всех вхождений символа удобно использовать генератор списка вместе с enumerate():

text = 'hello world'
symbol = 'l'
indices = [i for i, c in enumerate(text) if c == symbol]
print(indices)  # [2, 3, 9]

Python str to bytes (преобразование строки в байты в python)

[2, 3, 9]

функция разделить python (разделение строки на список в python)

Важно помнить, что enumerate() нумерует символы начиная с 0. Если требуется нумерация с 1, можно прибавить 1 к индексу.

Как найти номер символа, начиная с конца строки?

Методы rfind() и rindex() ищут последнее вхождение подстроки. Они возвращают индекс с начала строки, но находят самую правую позицию:

text = 'abracadabra'
print(text.rfind('a'))   # 10
print(text.rindex('a'))  # 10

вывести первый символ строки python (вывести первый символ строки в python)

10

вывести символ строки python (вывод символа строки в python)

Как получить порядковый номер (1‑индексация) символа?

Простым сложением единицы к найденному индексу:

idx = 'Python'.find('y')
number = idx + 1
print(number)  # 2

вывести длину строки python (вывести длину строки в python)

2

вывести элемент строки python (вывод конкретного символа строки по индексу в python)

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

Модуль re позволяет находить индексы по шаблону. Метод search() возвращает объект Match с атрибутом start():

import re
text = 'Цена: 100 рублей'
match = re.search(r'\d+', text)
if match:
    print(match.start())  # 6

задания на строки python (задания на строки в python)

6

замена символов python (замена символов в строке python)

Для поиска всех совпадений используется finditer():

indices = [m.start() for m in re.finditer(r'а', 'как дела?')]
print(indices)  # [0, 4, 6]

Python первое слово в строке (извлечение первого слова из строки в python)

[0, 4, 6]
Регулярные выражения работают медленнее простых методов, их стоит применять только при сложных паттернах.
- Python номера символов (номера (индексы) символов в строке python)
- Python новая строка (использование символа новой строки в python)
- Python строки find (метод find для строк)

Расширенные примеры работы с номерами символов

Поиск индексов всех символов с определённым условием

Пример находит позиции всех гласных букв в строке:

Пример
text = 'Программирование на Python'
vowels = set('аеёиоуыэюяAEIOU')
positions = [i for i, c in enumerate(text) if c.lower() in vowels]
print(positions)
[0, 4, 5, 10, 11, 13, 14, 15, 17, 20, 22]

Поиск индекса с учётом регистра

Метод find() чувствителен к регистру. Для регистронезависимого поиска обе строки приводятся к одному регистру:

Пример
text = 'Hello, World!'
symbol = 'h'
pos = text.lower().find(symbol.lower())
print(pos)  # 0
0

Поиск номера символа в подстроке (срез)

Можно искать символ только в ограниченной части строки, указав параметры start и end:

Пример
text = 'abcdefgh'
pos = text.find('c', 2, 5)  # поиск от индекса 2 до 5
print(pos)  # 2
2

Обработка многобайтовых символов (Unicode)

Строки Python хранят кодовые точки Unicode, поэтому индекс символа соответствует позиции кодовой точки, а не байта. Для работы с байтовыми строками используется bytes:

Пример
text = 'Привет'
b_text = text.encode('utf-8')
print(b_text)  # b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
pos_byte = b_text.find(b'\xd0\xb8')   # поиск байтовой последовательности
print(pos_byte)  # 4 (байт-индекс)
b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
4

Ручной перебор с помощью while

Иногда полезен классический цикл для поиска всех вхождений с контролем сдвига:

Пример
text = 'aaa'
symbol = 'a'
start = 0
indices = []
while True:
    pos = text.find(symbol, start)
    if pos == -1:
        break
    indices.append(pos)
    start = pos + 1
print(indices)  # [0, 1, 2]
[0, 1, 2]

Использование str.index() с обработкой исключения

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

Пример
text = 'abc'
try:
    i = text.index('d')
    print(i)
except ValueError:
    print('Символ не найден')
Символ не найден

Поиск индекса нескольких символов сразу

Использование any() с find() для проверки наличия любого из символов:

Пример
text = 'Python'
chars = ['x', 'y', 'z']
found = [c for c in chars if text.find(c) != -1]
print(found)  # ['y', 'x']
['y', 'x']

Получение номера символа по его порядку (ord)

Путаница: номер символа в Unicode (код) и индекс в строке - разные понятия. Для кода используется ord():

Пример
char = 'A'
unicode_code = ord(char)
print(unicode_code)  # 65
65

Не следует смешивать это с поиском индекса.

Номер символа в строке Python - comments

En
Python номер символа в строке (python)