I am fairly new to python and was wondering how do you get a character in a string based on an index number?
Say I have the string “hello” and index number 3. How do I get it to return the character in that spot, it seems that there is some built in method that I just cant seem to find.
asked Mar 17, 2013 at 2:08
1
You just need to index the string, just like you do with a list.
>>> 'hello'[3]
l
Note that Python indices (like most other languages) are zero based, so the first element is index 0, the second is index 1, etc.
For example:
>>> 'hello'[0]
h
>>> 'hello'[1]
e
answered Mar 17, 2013 at 2:10
VolatilityVolatility
31k10 gold badges80 silver badges88 bronze badges
2
its just straight forward.
str[any subscript]. //e.g. str[0], str[0][0]
answered Mar 17, 2013 at 2:14
xiriuslyxiriusly
6781 gold badge7 silver badges22 bronze badges
Check this page…
What you need is:
Strings can be subscripted (indexed); like in C, the first character of a string has subscript (index) 0.
There is no separate character type; a character is simply a string of size one.
Like in Icon, substrings can be specified with the slice notation: two indices separated by a colon.
Example:
>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
For your case try this:
>>> s = 'hello'
>>> s[3]
'l'
answered Mar 17, 2013 at 3:03
pradyunsgpradyunsg
18k11 gold badges43 silver badges94 bronze badges
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
324k56 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,59219 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
Время чтения 4 мин.
Строки Python — это массивы байтов, представляющие символы Unicode. Однако в Python нет символьного типа данных, и один символ — это просто строка длиной 1.
В этом руководстве мы увидим, как получить доступ к символам в строке по индексу в Python. Python предоставляет богатый набор операторов, функций и методов для работы со строками.
Содержание
- Индексация строк в Python
- Доступ к символам строки по индексу
- IndexError: индекс строки вне допустимого диапазона
- TypeError: строковые индексы должны быть целыми числами
- Доступ к строковым символам по отрицательному индексу
- Изменение символов в строке с помощью []
- Нарезка строк в Python
- Заключение
Часто в языках программирования к отдельным элементам в упорядоченном наборе данных можно обращаться напрямую, используя числовой индекс или значение ключа. Этот процесс называется индексацией.
В Python строки представляют собой упорядоченные последовательности символьных данных и, следовательно, могут быть проиндексированы таким образом. Доступ к отдельным символам в строке можно получить, указав имя строки, за которым следует число в квадратных скобках([]).
Доступ к символам строки по индексу
Индексация строк в Python начинается с нуля: первый символ в строке имеет индекс 0, следующий — индекс 1 и так далее.
Индексом последнего символа будет длина строки — 1.
См. следующий пример.
# app.py str = ‘Millie Bobby Brown’ print(str[7]) |
Так как в Python индексация строк начинается с 0 до n-1, где n — размер строки, символы в строке размера n доступны от 0 до n-1.
В приведенном выше коде мы обращаемся к символу по индексу.
Индекс начинается с 0, поэтому мы выберем 7-й символ, то есть B.
Выход:
➜ pyt python3 app.py B ➜ pyt |
Мы можем получить доступ к отдельным символам, используя индекс, начинающийся с 0.
IndexError: индекс строки вне допустимого диапазона
Если мы попытаемся использовать индекс за концом строки, это приведет к ошибке.
См. следующий код.
# app.py str = ‘Millie’ print(str[7]) |
Выход:
➜ pyt python3 app.py Traceback(most recent call last): File “app.py”, line 2, in <module> print(str[7]) IndexError: string index out of range ➜ pyt |
Итак, мы получили ошибку: IndexError: string index out of range.
TypeError: строковые индексы должны быть целыми числами
Разрешается передавать только целые числа, так как индекс, число с плавающей запятой или другие типы вызовут ошибку TypeError.
См. следующий код.
# app.py str = ‘Emma Watson’ print(str[1.5]) |
Выход:
➜ pyt python3 app.py Traceback(most recent call last): File “app.py”, line 2, in <module> print(str[1.5]) TypeError: string indices must be integers ➜ pyt |
Мы передали значение с плавающей запятой в качестве индекса; вот почему мы получили TypeError: строковые индексы должны быть целыми числами.
Доступ к строковым символам по отрицательному индексу
Строковые индексы также могут быть указаны с отрицательными числами, и в этом случае индексирование происходит с конца строки назад:
- строка[-1] относится к последнему символу,
- string[-2] предпоследний символ и так далее.
- Если размер строки равен n, тогда string[-n] вернет первый символ строки.
См. следующий код.
# app.py str = ‘Emma Watson’ print(str[–6]) print(str[–5]) print(str[–len(str)]) |
Выход:
➜ pyt python3 app.py W a E ➜ pyt |
Попытка проиндексировать отрицательные числа за пределами начала строки приводит к ошибке.
Для любой непустой строки str, str[len(s)-1] и str[-1] возвращают последний символ. Нет индекса, который имел бы смысл для пустой строки.
Изменение символов в строке с помощью []
Давайте попробуем изменить строку, назначив определенные символы в определенную позицию.
# app.py str = ‘Emma Watson is Hermione’ str[6] = ‘K’ |
Выход:
➜ pyt python3 app.py Traceback(most recent call last): File “app.py”, line 2, in <module> str[6] = ‘K’ TypeError: ‘str’ object does not support item assignment ➜ pyt |
Мы получим TypeError: объект ‘str’ не поддерживает присваивание элемента.
Нарезка строк в Python
Python также допускает форму синтаксиса индексации, которая извлекает подстроки из строки, известную как нарезка строки.
Если str является строкой, выражение формы str[x:y] возвращает часть s, начиная с позиции x и до позиции y, но не включая ее.
Допустим, мы хотим извлечь Watson из строки Emma Watson с помощью среза, а затем мы можем написать следующий код для получения этого вывода.
# app.py str = ‘Emma Watson is Hermione’ print(str[5:11]) |
Выход:
➜ pyt python3 app.py Watson ➜ pyt |
Опять же, второй индекс указывает первый символ, который не включен в результат. Это может показаться несколько неинтуитивным, но дает следующий результат, который имеет смысл: выражение str[x:y] вернет подстроку длиной y – x символов, в данном случае 11 – 5 = 6. Итак, Watson слово из 6 символов.
Строковые индексы отсчитываются от нуля. Первый символ в строке имеет индекс 0. Это относится как к стандартной индексации, так и к нарезке.
Заключение
Символы доступа в String являются базовыми операциями в любом языке программирования, а Python очень легко обеспечивает индексирование и нарезку. Мы можем получить доступ к символам, указав положительный и отрицательный индекс.
Часто нам нужно найти символ в строке 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()
можно использовать в том числе и для поиска общего числа совпадений подстроки.
Перейти к содержанию
На чтение 1 мин Просмотров 786 Опубликовано 18 июня, 2022 Обновлено 18 июня, 2022
С клавиатуры вводится номер (позиция) буквы в английском алфавите. Вывести на экран запрашиваемый символ.
Для решения данной задачи потребуются две встроенные в Python функции – ord() и chr().
Функция ord() принимает строку, состоящую из одного символа, и возвращает его числовой код
по таблице символов. Например, ord(‘a’) вернет число 97.
Если к полученному числовому коду первой буквы алфавита прибавить порядковый номер
необходимой нам буквы в алфавите и вычесть единицу, получим числовой код искомой буквы.
С помощью функции chr) получаем по нему требуемый символ.
number = input("Какую по счету букву алфавита вывести: ")
number = int(number)
first_letter_code = ord('A')
your_letter_code = first_letter_code + number - 1
your_letter = chr(your_letter_code)
print('Это буква "{}"'.format(your_letter))
Пример выполнения:
Какую по счету букву алфавите вывести: 10
Это буква "J"