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

How can I get the position of a character inside a string in Python?

bad_coder's user avatar

bad_coder

10.9k20 gold badges42 silver badges70 bronze badges

asked Feb 19, 2010 at 6:32

user244470's user avatar

0

There are two string methods for this, find() and index(). The difference between the two is what happens when the search string isn’t found. find() returns -1 and index() raises a ValueError.

Using find()

>>> myString = 'Position of a character'
>>> myString.find('s')
2
>>> myString.find('x')
-1

Using index()

>>> myString = 'Position of a character'
>>> myString.index('s')
2
>>> myString.index('x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

From the Python manual

string.find(s, sub[, start[, end]])
Return the lowest index in s where the substring sub is found such that sub is wholly contained in s[start:end]. Return -1 on failure. Defaults for start and end and interpretation of negative values is the same as for slices.

And:

string.index(s, sub[, start[, end]])
Like find() but raise ValueError when the substring is not found.

Tomerikoo's user avatar

Tomerikoo

18.1k16 gold badges45 silver badges60 bronze badges

answered Feb 19, 2010 at 6:35

Eli Bendersky's user avatar

Eli BenderskyEli Bendersky

261k88 gold badges350 silver badges412 bronze badges

1

Just for a sake of completeness, if you need to find all positions of a character in a string, you can do the following:

s = 'shak#spea#e'
c = '#'
print([pos for pos, char in enumerate(s) if char == c])

which will print: [4, 9]

Jolbas's user avatar

Jolbas

7475 silver badges15 bronze badges

answered Sep 26, 2015 at 7:59

Salvador Dali's user avatar

Salvador DaliSalvador Dali

212k146 gold badges696 silver badges752 bronze badges

2

>>> s="mystring"
>>> s.index("r")
4
>>> s.find("r")
4

«Long winded» way

>>> for i,c in enumerate(s):
...   if "r"==c: print i
...
4

to get substring,

>>> s="mystring"
>>> s[4:10]
'ring'

answered Feb 19, 2010 at 6:36

ghostdog74's user avatar

ghostdog74ghostdog74

325k56 gold badges257 silver badges342 bronze badges

4

Just for completion, in the case I want to find the extension in a file name in order to check it, I need to find the last ‘.’, in this case use rfind:

path = 'toto.titi.tata..xls'
path.find('.')
4
path.rfind('.')
15

in my case, I use the following, which works whatever the complete file name is:

filename_without_extension = complete_name[:complete_name.rfind('.')]

answered Sep 28, 2017 at 6:37

A.Joly's user avatar

A.JolyA.Joly

2,2772 gold badges20 silver badges24 bronze badges

2

What happens when the string contains a duplicate character?
from my experience with index() I saw that for duplicate you get back the same index.

For example:

s = 'abccde'
for c in s:
    print('%s, %d' % (c, s.index(c)))

would return:

a, 0
b, 1
c, 2
c, 2
d, 4

In that case you can do something like that:

for i, character in enumerate(my_string):
   # i is the position of the character in the string

Martin Tournoij's user avatar

answered Jul 1, 2015 at 12:40

DimSarak's user avatar

DimSarakDimSarak

4522 gold badges5 silver badges11 bronze badges

1

string.find(character)  
string.index(character)  

Perhaps you’d like to have a look at the documentation to find out what the difference between the two is.

Brad Koch's user avatar

Brad Koch

19k19 gold badges107 silver badges137 bronze badges

answered Feb 19, 2010 at 6:37

John Machin's user avatar

John MachinJohn Machin

80.9k11 gold badges141 silver badges187 bronze badges

1

A character might appear multiple times in a string. For example in a string sentence, position of e is 1, 4, 7 (because indexing usually starts from zero). but what I find is both of the functions find() and index() returns first position of a character. So, this can be solved doing this:

def charposition(string, char):
    pos = [] #list to store positions for each 'char' in 'string'
    for n in range(len(string)):
        if string[n] == char:
            pos.append(n)
    return pos

s = "sentence"
print(charposition(s, 'e')) 

#Output: [1, 4, 7]

answered Sep 16, 2018 at 9:33

itssubas's user avatar

itssubasitssubas

1632 silver badges11 bronze badges

If you want to find the first match.

Python has a in-built string method that does the work: index().

string.index(value, start, end)

Where:

  • Value: (Required) The value to search for.
  • start: (Optional) Where to start the search. Default is 0.
  • end: (Optional) Where to end the search. Default is to the end of the string.
def character_index():
    string = "Hello World! This is an example sentence with no meaning."
    match = "i"
    return string.index(match)
        
print(character_index())
> 15

If you want to find all the matches.

Let’s say you need all the indexes where the character match is and not just the first one.

The pythonic way would be to use enumerate().

def character_indexes():
    string = "Hello World! This is an example sentence with no meaning."
    match = "i"

    indexes_of_match = []

    for index, character in enumerate(string):
        if character == match:
            indexes_of_match.append(index)
    return indexes_of_match

print(character_indexes())
# [15, 18, 42, 53]

Or even better with a list comprehension:

def character_indexes_comprehension():
    string = "Hello World! This is an example sentence with no meaning."
    match = "i"

    return [index for index, character in enumerate(string) if character == match]


print(character_indexes_comprehension())
# [15, 18, 42, 53]

answered Jan 26, 2021 at 5:01

Guzman Ojero's user avatar

Guzman OjeroGuzman Ojero

2,6521 gold badge19 silver badges20 bronze badges

2

more_itertools.locate is a third-party tool that finds all indicies of items that satisfy a condition.

Here we find all index locations of the letter "i".

Given

import more_itertools as mit


text = "supercalifragilisticexpialidocious"
search = lambda x: x == "i"

Code

list(mit.locate(text, search))
# [8, 13, 15, 18, 23, 26, 30]

answered Feb 9, 2018 at 0:46

pylang's user avatar

pylangpylang

39.8k11 gold badges127 silver badges120 bronze badges

Most methods I found refer to finding the first substring in a string. To find all the substrings, you need to work around.

For example:

Define the string

vars = ‘iloveyoutosimidaandilikeyou’

Define the substring

key = 'you'

Define a function that can find the location for all the substrings within the string

def find_all_loc(vars, key):

    pos = []
    start = 0
    end = len(vars)

    while True: 
        loc = vars.find(key, start, end)
        if  loc is -1:
            break
        else:
            pos.append(loc)
            start = loc + len(key)
            
    return pos

pos = find_all_loc(vars, key)

print(pos)
[5, 24]

Emi OB's user avatar

Emi OB

2,7943 gold badges13 silver badges28 bronze badges

answered Nov 5, 2021 at 8:44

Chan Kin Sung's user avatar

0

A solution with numpy for quick access to all indexes:

string_array = np.array(list(my_string))
char_indexes = np.where(string_array == 'C')

answered Jan 15, 2020 at 20:40

Seb's user avatar

SebSeb

3024 silver badges6 bronze badges

2

Строки представляют собой набор символов. Каждый символ в строке занимает определенную позицию, т.е имеет свой индекс. Зная этот индекс, мы можем получить доступ к тому или иному символу. В этой статье мы рассмотрим, как найти индекс символа в строке.

Как найти индекс символа в строке при помощи функции find()

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

В следующем коде мы используем эту функцию для поиска позиции символа в строке.

s = 'python is fun'
c = 'n'
print(s.find(c))

# 5

Обратите внимание, что функция возвращает позицию символа, идущего в строке первым. То есть мы получили индекс символа “n” из слова “python”, а не из слова “fun”. Также следует помнить, что функция find() возвращает -1, если заданная подстрока отсутствует в строке.

Использование функции rfind()

Эта функция аналогична функции find(), с той лишь разницей, что она возвращает последнюю позицию, на которой расположена искомая подстрока. Например:

s = 'python is fun'
c = 'n'
print(s.rfind(c))

#12

Как найти индекс символа в строке при помощи функции index()

Функция index() тоже позволяет найти индекс подстроки в строке. Как и find(), она возвращает первое вхождение искомого символа в строке. Например:

s = 'python is fun'
c = 'n'
print(s.index(c))

# 5

Разница между функциями index() и find() заключается в том, что функция index() возвращает ValueError, если в строке отсутствует нужный символ.

Использование цикла for для поиска позиции символа в строке

При таком подходе мы перебираем символы строки в цикле и сравниваем каждый символ с искомым. Каждая позиция, по которой найдено совпадение, отмечается и сохраняется в отдельной переменной.

Следующий код реализует эту логику.

s = 'python is fun'
c = 'n'
lst = []
for pos,char in enumerate(s):
    if(char == c):
        lst.append(pos)
print(lst)

#[5, 12]

Мы используем функцию enumerate(), поскольку она упрощает итерацию и присваивает переменную счетчика каждому символу строки.

Это также можно реализовать с помощью list comprehension, что считается более быстрым и чистым решением. Например:

s = 'python is fun'
c = 'n'
print([pos for pos, char in enumerate(s) if char == c])

# [5, 12]

Перевод статьи Manav Narula «Find Character in a String in Python».

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

1. Использование find() функция

Стандартным решением для поиска позиции символа в строке является использование find() функция. Возвращает индекс первого вхождения в строку, где найден символ. Он возвращается -1 когда персонаж не найден.

if __name__ == ‘__main__’:

    s = «Techie»

    ch = ‘e’

    index = s.find(ch)

    if index != 1:

        print(f«Found character ‘{ch}’ at index {index}»)    # Найден символ ‘e’ в индексе 1

    else:

        print(«Character not found»)

Скачать  Выполнить код

2. Использование index() функция

В качестве альтернативы вы можете использовать index() функция, похожая на find() функционировать, но повышает ValueError когда персонаж не найден.

if __name__ == ‘__main__’:

    s = «Techie»

    ch = ‘e’

    try:

        index = s.index(ch)

        print(f«Found character ‘{ch}’ at index {index}»)  # Найден символ ‘e’ в индексе 1

    except:

        print(«Character not found»)

Скачать  Выполнить код

3. Использование enumerate() функция

Вот решение с использованием enumerate() работа с генераторами. Это полезно, когда вам нужно найти положение всех символов в строке, которые удовлетворяют условию.

if __name__ == ‘__main__’:

    s = «Techie»

    ch = ‘e’

    indexes = [i for i, c in enumerate(s) if c == ch]

    print(f«Found character ‘{ch}’ at index {indexes}»)  # Найден символ ‘e’ по индексу [1, 5]

Скачать  Выполнить код

Наконец, вы можете использовать locate() функцию от more_itertools Модуль Python для поиска символов в строке. Он возвращает индекс каждого символа в строке, для которой возвращается указанный предикат. True.

import more_itertools

if __name__ == ‘__main__’:

    s = «Techie»

    ch = ‘e’

    index = next(more_itertools.locate(s, lambda x: x == ch))

    if index != 1:

        print(f«Found character ‘{ch}’ at index {index}»)    # Найден символ ‘e’ в индексе 1

    else:

        print(«Character not found»)

Скачать код

Это все, что касается поиска индекса символа в строке в Python.

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования :)

Given a string and a character, your task is to find the first position of the character in the string using Python. These types of problems are very competitive programming where you need to locate the position of the character in a string. Let’s discuss a few methods to solve the problem.

Method 1: Get the position of a character in Python using rfind()

Python String rfind() method returns the highest index of the substring if found in the given string. If not found then it returns -1.

Python3

string = 'Geeks'

letter = 'k'

print(string.rfind(letter))

Method 2: Get the position of a character in Python using regex

re.search() method either returns None (if the pattern doesn’t match) or re.MatchObject contains information about the matching part of the string. This method stops after the first match,

Python3

import re

string = 'Geeksforgeeks'

pattern = 'for'

match=(re.search(pattern, string))

print ("starting index", match.start())

print ("start and end index", match.span())

Output

starting index 5
start and end index (5, 8)

Method 3: Get the position of a character in Python using index()

This Method raises Value Error in case the character is not present 

Python3

ini_string1 = 'xyze'

c = "b"

print ("initial_strings : ", ini_string1,

             "ncharacter_to_find : ", c)

try:

    res = ini_string1.index(c)

    print ("Character {} in string {} is present at {}".format(

                                  c, ini_string1, str(res + 1)))

except ValueError as e:

    print ("No such character available in string {}".format(ini_string1))

Output:

initial_strings :  xyze  
character_to_find :  b
No such character available in string xyze

Method 4: Get the position of a character in Python using the loop 

In this example, we will use the Python loop to find the position of a character in a given string.

Python3

ini_string = 'abcdef'

c = "b"

print("initial_string : ", ini_string, "ncharacter_to_find : ", c)

res = None

for i in range(0, len(ini_string)):

    if ini_string[i] == c:

        res = i + 1

        break

if res == None:

    print("No such character available in string")

else:

    print("Character {} is present at {}".format(c, str(res)))

Output

initial_string :  abcdef 
character_to_find :  b
Character b is present at 2

Time Complexity: O(n), where n is length of string.
Auxiliary Space: O(1)

Method 5: Get the position of a character in Python using str.find

This method returns -1 in case the character is not present. 

Python3

ini_string = 'abcdef'

ini_string2 = 'xyze'

c = "b"

print("initial_strings : ", ini_string, " ",

      ini_string2, "ncharacter_to_find : ", c)

res1 = ini_string.find(c)

res2 = ini_string2.find(c)

if res1 == -1:

    print("No such character available in string {}".format(

        ini_string))

else:

    print("Character {} in string {} is present at {}".format(

        c, ini_string, str(res1 + 1)))

if res2 == -1:

    print("No such character available in string {}".format(

        ini_string2))

else:

    print("Character {} in string {} is present at {}".format(

        c, ini_string2, str(res2 + 1)))

Output:

initial_strings :  abcdef   xyze  
character_to_find :  b
Character b in string abcdef is present at 2
No such character available in string xyze

Method 6: Get the position of a character in Python using a list comprehension and next function

This method involves using a list comprehension to create a list of tuples containing the index and character for each character in the string. We can then use the next function to return the first tuple whose character matches the one we are searching for. If the character is not found, we raise a ValueError.

Python3

def find_position(string, char):

    try:

      return 1+ next(i for i, c in enumerate(string) if c == char)

    except:

      return -1

string = 'xybze'

char = 'b'

print("initial_strings : ", string)

print("character_to_find : ", char)

print(find_position(string, char))

Output

initial_strings :  xybze
character_to_find :  b
3

Time complexity: O(n)
Auxiliary Space: O(n)

Last Updated :
21 Mar, 2023

Like Article

Save Article

  • Главная

  • Инструкции

  • Python

  • Индексация и разделение строк в Python 3

Blog

Умение работать со строками очень важно в любом языке программирования. Сегодня мы расскажем про строки в Python: что это такое, как найти индекс в строке python, какие есть методы работы с индексами. 

Индексация И Разделение Строк В Python 3 (1)

Строки

Строки – это последовательности символьных данных, которые, как и любые другие типы данных в языке python на основе последовательностей, могут быть проиндексированы. Чтобы задать строку, надо заключить последовательность символов (буквы, цифры, пробелы, знаки препинания и т.д.) в одинарные, двойные или тройные кавычки. Индексирование символов начинается с нуля, и каждый символ в строке имеет собственный индекс. Индекс последнего символа на единицу меньше длины строки.

string = 'We love Python!'

Если мы проверим тип переменной string, то получим: str.

Индексы

Числовые индексы могут быть положительными и отрицательными. Чтобы обратиться к символу по индексу, надо указать его в квадратных скобках []. Если ссылаться на конкретный индекс, то можно получить символ, которому он соответствует:

print('4-й символ: ', string[4])
4-й символ: o

В нашей строке символ «o» имеет индекс 4.

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

print('15-й символ: ', string[15])
IndexError: string index out of range

Чтобы узнать максимальный индекс в строке можно отнять 1 от длины строки так как индексация начинается с 0:

print('Максимальный индекс в строке: ',len(string) - 1)
Максимальный индекс в строке: 14

При использовании индексы могут быть не только положительными, но и отрицательными. В этом случае индексация в Python идет с конца:

print('-1-й символ в строке: ', string[-1])
-1-й символ: !

Индекс -1 имеет последний символ строки.

Срезы строк

Можно выводить не только символ с конкретным индексом, но и диапазон символов в строке – подстроку. Для этого используется оператор нарезки, а фрагмент строки, который получается в итоге, называется срезом.

print('Символы с 1 по 6: ', string[1:6])
Символы с 1 по 6:  e lov

В данном примере 1 – индекс начала среза, а 6 – индекс окончания среза. В подстроку входят символы с 1 по 5 включительно.

В случае, если требуется получить подстроку с 0 символа, то индекс начала среза можно опустить:

print('Символы с 0 по 6: ', string[:6])
Символы с 0 по 6:  We lov

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

При разделении строк в Python 3 на срезы также можно использовать индексы с отрицательными значениями. Отрицательные индексы начинаются с -1 и уменьшаются при отдалении от конца строки:

print('Символы с -1 по -7: ', string[-7:-1])
Символы с -1 по -7:  Python

Если не указывать индексы начала и конца среза, то мы получим всю строку:

print('Строка: ', string[:])
Строка:  We love Python!

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

print('Символы с 6 по 100: ', string[6:100])
Символы с 6 по 100:  e Python!

При создании срезов также можно использовать еще один параметр – шаг. Шаг показывает, на сколько элементов требуется сдвинуться после получения символа. В примерах, рассмотренных выше, мы не указывали шаг, в таких случае используется значение по умолчанию, равное 1.

print('Подстрока с шагом 3: ', string[0:10:3])
Подстрока с шагом 3:  Wley

Мы получили каждый третий элемент: We love Python!

Мы можем использовать шаг без указания начала и конца среза – в таком случае подстрока будет составляться из каждого n-ого элемента по всей строке.

print('Подстрока с шагом 3: ', string[::3])
Подстрока с шагом 3:  Wleyo

Значение шага также может быть отрицательным.

Методы

Существует несколько методов, которые позволяют вести подсчет строк и выводить индексы строки python. Один из таких методов был рассмотрен выше: len(string) – длина строки.

Помимо длины строки мы можем также подсчитать количество вхождения какого либо символа или подстроки с помощью метода count():

print('Количество вхождений символа e:', string.count('e'))
Количество вхождений символа e: 2

Следующий метод позволяет определить индекс символа или подстроки в исходной строке:

print('Индекс символа e:', string.find('e'))
Индекс символа e: 1

Первый символ «e» появляется на позиции с индексом 1. В случае если такой элемент не найден, метод вернет -1. Если мы находим индекс подстроки, мы получаем индекс ее первого символа:

print('Индекс подстроки love:', string.find('love'))
Индекс подстроки love: 3

Если нам нужно найти подстроку с определенного индекса, мы можем указать диапазон символов, в котором следует искать:

print('Индекс символа e:', string.find('e', 4,9))
Индекс символа e: 6

В случае необходимости получить максимальный индекс элемента в строке мы можем воспользоваться методом rfind(). Он работает аналогично find(), с той разницей, что find() находит минимальный индекс элемента (первое вхождение элемента в строку).

Для поиска подстроки можно воспользоваться методами index() и rindex(). Они работают аналогично find() и rfind(), однако в случае если подстрока не найдена возвращают ошибку:

ValueError: substring not found

Заключение

В этот раз мы рассмотрели особенности типов данных строки, индексацию и срез строк в Python 3. Эти базовые знания пригодятся при выполнении самых разных задач с одним из самых популярных языков программирования. Дополнительную информацию вы можете найти в документации, а также в статьях о Python в блоге cloud.timeweb.com.

Понравилась статья? Поделить с друзьями:
  • Как найти художественную идею стихотворения
  • Как найти паблик в телеграмме по названию
  • Как составить авансовый отчет для бухгалтерии
  • Решить задачу как найти процент
  • Химки как найти автомобиль