How can I get the position of a character inside a string in Python?
bad_coder
10.9k20 gold badges42 silver badges70 bronze badges
asked Feb 19, 2010 at 6:32
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 ins[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]])
Likefind()
but raiseValueError
when the substring is not found.
Tomerikoo
18.1k16 gold badges45 silver badges60 bronze badges
answered Feb 19, 2010 at 6:35
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
7475 silver badges15 bronze badges
answered Sep 26, 2015 at 7:59
Salvador DaliSalvador Dali
212k145 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
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.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
answered Jul 1, 2015 at 12:40
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
19k19 gold badges107 silver badges137 bronze badges
answered Feb 19, 2010 at 6:37
John MachinJohn Machin
80.9k11 gold badges140 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
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 OjeroGuzman Ojero
2,6021 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
pylangpylang
39.7k11 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
2,7943 gold badges13 silver badges28 bronze badges
answered Nov 5, 2021 at 8:44
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
SebSeb
3024 silver badges6 bronze badges
2
В этом посте мы обсудим, как найти индекс первого вхождения символа в строку в 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 и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Строки представляют собой набор символов. Каждый символ в строке занимает определенную позицию, т.е имеет свой индекс. Зная этот индекс, мы можем получить доступ к тому или иному символу. В этой статье мы рассмотрим, как найти индекс символа в строке.
Как найти индекс символа в строке при помощи функции 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».
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. Для решения этой задачи разработчики используют метод find()
. Он помогает найти индекс первого совпадения подстроки в строке. Если символ или подстрока не найдены, find возвращает -1.
Синтаксис
string.find(substring,start,end)
Метод find
принимает три параметра:
substring
(символ/подстрока) — подстрока, которую нужно найти в данной строке.start
(необязательный) — первый индекс, с которого нужно начинать поиск. По умолчанию значение равно 0.end
(необязательный) — индекс, на котором нужно закончить поиск. По умолчанию равно длине строки.
Параметры, которые передаются в метод, — это подстрока, которую требуются найти, индекс начала и конца поиска. Значение по умолчанию для начала поиска — 0, а для конца — длина строки.
В этом примере используем метод со значениями по умолчанию.
Метод find()
будет искать символ и вернет положение первого совпадения. Даже если символ встречается несколько раз, то метод вернет только положение первого совпадения.
>>> string = "Добро пожаловать!"
>>> print("Индекс первой буквы 'о':", string.find("о"))
Индекс первой буквы 'о': 1
Поиск не с начала строки с аргументом start
Можно искать подстроку, указав также начальное положение поиска.
В этом примере обозначим стартовое положение значением 8 и метод начнет искать с символа с индексом 8. Последним положением будет длина строки — таким образом метод выполнит поиска с индекса 8 до окончания строки.
>>> string = "Специалисты назвали плюсы и минусы Python"
>>> print("Индекс подстроки 'али' без учета первых 8 символов:", string.find("али", 8))
Индекс подстроки 'али' без учета первых 8 символов: 16
Поиск символа в подстроке со start и end
С помощью обоих аргументов (start
и end
) можно ограничить поиск и не проводить его по всей строке. Найдем индексы слова «пожаловать» и повторим поиск по букве «о».
>>> string = "Добро пожаловать!"
>>> start = string.find("п")
>>> end = string.find("ь") + 1
>>> print("Индекс первой буквы 'о' в подстроке:", string.find("о", start, end))
Индекс первой буквы 'о' в подстроке: 7
Проверка есть ли символ в строке
Мы знаем, что метод find()
позволяет найти индекс первого совпадения подстроки. Он возвращает -1
в том случае, если подстрока не была найдена.
>>> string = "Добро пожаловать!"
>>> print("Есть буква 'г'?", string.find("г") != -1)
Есть буква 'г'? False
>>> print("Есть буква 'т'?", string.find("т") != -1)
Есть буква 'т'? True
Поиск последнего вхождения символа в строку
Функция rfind()
напоминает find()
, а единое отличие в том, что она возвращает максимальный индекс. В обоих случаях же вернется -1
, если подстрока не была найдена.
В следующем примере есть строка «Добро пожаловать!». Попробуем найти в ней символ «о» с помощью методов find()
и rfind()
.
>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом rfind:", string.rfind("о"))
Поиск 'о' методом rfind: 11
Вывод показывает, что find()
возвращает индекс первого совпадения подстроки, а rfind()
— последнего совпадения.
Второй способ поиска — index()
Метод index()
помогает найти положение данной подстроки по аналогии с find()
. Единственное отличие в том, что index()
бросит исключение в том случае, если подстрока не будет найдена, а find()
просто вернет -1
.
Вот рабочий пример, показывающий разницу в поведении index()
и find()
:
>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом index:", string.index("о"))
Поиск 'о' методом index: 1
В обоих случаях возвращается одна и та же позиция. А теперь попробуем с подстрокой, которой нет в строке:
>>> string = "Добро пожаловать"
>>> print("Поиск 'г' методом find:", string.find("г"))
Поиск 'г' методом find: 1
>>> print("Поиск 'г' методом index:", string.index("г"))
Traceback (most recent call last):
File "pyshell#21", line 1, in module
print("Поиск 'г' методом index:", string.index("г"))
ValueError: substring not found
В этом примере мы пытались найти подстроку «г». Ее там нет, поэтому find()
возвращает -1, а index()
бросает исключение.
Поиск всех вхождений символа в строку
Чтобы найти общее количество совпадений подстроки в строке можно использовать ту же функцию find()
. Пройдемся циклом while по строке и будем задействовать параметр start
из метода find()
.
Изначально переменная start
будет равна -1, что бы прибавлять 1 у каждому новому поиску и начать с 0. Внутри цикла проверяем, присутствует ли подстрока в строке с помощью метода find.
Если вернувшееся значение не равно -1, то обновляем значением count.
Вот рабочий пример:
my_string = "Добро пожаловать"
start = -1
count = 0
while True:
start = my_string.find("о", start+1)
if start == -1:
break
count += 1
print("Количество вхождений символа в строку: ", count )
Количество вхождений символа в строку: 4
Выводы
- Метод
find()
помогает найти индекс первого совпадения подстроки в данной строке. Возвращает -1, если подстрока не была найдена. - В метод передаются три параметра: подстрока, которую нужно найти,
start
со значением по умолчанию равным 0 иend
со значением по умолчанию равным длине строки. - Можно искать подстроку в данной строке, задав начальное положение, с которого следует начинать поиск.
- С помощью параметров
start
иend
можно ограничить зону поиска, чтобы не выполнять его по всей строке. - Функция
rfind()
повторяет возможностиfind()
, но возвращает максимальный индекс (то есть, место последнего совпадения). В обоих случаях возвращается -1, если подстрока не была найдена. index()
— еще одна функция, которая возвращает положение подстроки. Отличие лишь в том, чтоindex()
бросает исключение, если подстрока не была найдена, аfind()
возвращает -1.find()
можно использовать в том числе и для поиска общего числа совпадений подстроки.