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
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
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,6221 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.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
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».
-
Главная
-
Инструкции
-
Python
-
Индексация и разделение строк в Python 3
Умение работать со строками очень важно в любом языке программирования. Сегодня мы расскажем про строки в Python: что это такое, как найти индекс в строке python, какие есть методы работы с индексами.
Строки
Строки – это последовательности символьных данных, которые, как и любые другие типы данных в языке 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.
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