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-1on 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 raiseValueErrorwhen 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 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
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,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
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
Текстовые переменные str в Питоне
Строковый тип str в Python используют для работы с любыми текстовыми данными. Python автоматически определяет тип str по кавычкам – одинарным или двойным:
>>> stroka = 'Python'
>>> type(stroka)
<class 'str'>
>>> stroka2 = "code"
>>> type(stroka2)
<class 'str'>
Для решения многих задач строковую переменную нужно объявить заранее, до начала исполнения основной части программы. Создать пустую переменную str просто:
stroka = ''
Или:
stroka2 = ""
Если в самой строке нужно использовать кавычки – например, для названия книги – то один вид кавычек используют для строки, второй – для выделения названия:
>>> print("'Самоучитель Python' - возможно, лучший справочник по Питону.")
'Самоучитель Python' - возможно, лучший справочник по Питону.
>>> print('"Самоучитель Python" - возможно, лучший справочник по Питону.')
"Самоучитель Python" - возможно, лучший справочник по Питону.
Использование одного и того же вида кавычек внутри и снаружи строки вызовет ошибку:
>>> print(""Самоучитель Python" - возможно, лучший справочник по Питону.")
File "<pyshell>", line 1
print(""Самоучитель Python" - возможно, лучший справочник по Питону.")
^
SyntaxError: invalid syntax
Кроме двойных " и одинарных кавычек ', в Python используются и тройные ''' – в них заключают текст, состоящий из нескольких строк, или программный код:
>>> print('''В тройные кавычки заключают многострочный текст.
Программный код также можно выделить тройными кавычками.''')
В тройные кавычки заключают многострочный текст.
Программный код также можно выделить тройными кавычками.
Длина строки len в Python
Для определения длины строки используется встроенная функция len(). Она подсчитывает общее количество символов в строке, включая пробелы:
>>> stroka = 'python'
>>> print(len(stroka))
6
>>> stroka1 = ' '
>>> print(len(stroka1))
1
Преобразование других типов данных в строку
Целые и вещественные числа преобразуются в строки одинаково:
>>> number1 = 55
>>> number2 = 55.5
>>> stroka1 = str(number1)
>>> stroka2 = str(number2)
>>> print(type(stroka1))
<class 'str'>
>>> print(type(stroka2))
<class 'str'>
Решение многих задач значительно упрощается, если работать с числами в строковом формате. Особенно это касается заданий, где нужно разделять числа на разряды – сотни, десятки и единицы.
Сложение и умножение строк
Как уже упоминалось в предыдущей главе, строки можно складывать – эта операция также известна как конкатенация:
>>> str1 = 'Python'
>>> str2 = ' - '
>>> str3 = 'самый гибкий язык программирования'
>>> print(str1 + str2 + str3)
Python - самый гибкий язык программирования
При необходимости строку можно умножить на целое число – эта операция называется репликацией:
>>> stroka = '*** '
>>> print(stroka * 5)
*** *** *** *** ***
Подстроки
Подстрокой называется фрагмент определенной строки. Например, ‘abra’ является подстрокой ‘abrakadabra’. Чтобы определить, входит ли какая-то определенная подстрока в строку, используют оператор in:
>>> stroka = 'abrakadabra'
>>> print('abra' in stroka)
True
>>> print('zebra' in stroka)
False
Для обращения к определенному символу строки используют индекс – порядковый номер элемента. Python поддерживает два типа индексации – положительную, при которой отсчет элементов начинается с 0 и с начала строки, и отрицательную, при которой отсчет начинается с -1 и с конца:
| Положительные индексы | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| Пример строки | P | r | o | g | l | i | b |
| Отрицательные индексы | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
Чтобы получить определенный элемент строки, нужно указать его индекс в квадратных скобках:
>>> stroka = 'программирование'
>>> print(stroka[7])
м
>>> print(stroka[-1])
е
Срезы строк в Python
Индексы позволяют работать с отдельными элементами строк. Для работы с подстроками используют срезы, в которых задается нужный диапазон:
>>> stroka = 'программирование'
>>> print(stroka[7:10])
мир
Диапазон среза [a:b] начинается с первого указанного элемента а включительно, и заканчивается на последнем, не включая b в результат:
>>> stroka = 'программa'
>>> print(stroka[3:8])
грамм
Если не указать первый элемент диапазона [:b], срез будет выполнен с начала строки до позиции второго элемента b:
>>> stroka = 'программa'
>>> print(stroka[:4])
прог
В случае отсутствия второго элемента [a:] срез будет сделан с позиции первого символа и до конца строки:
>>> stroka = 'программa'
>>> print(stroka[3:])
граммa
Если не указана ни стартовая, ни финальная позиция среза, он будет равен исходной строке:
>>> stroka = 'позиции не заданы'
>>> print(stroka[:])
позиции не заданы
Шаг среза
Помимо диапазона, можно задавать шаг среза. В приведенном ниже примере выбирается символ из стартовой позиции среза, а затем каждая 3-я буква из диапазона:
>>> stroka = 'Python лучше всего подходит для новичков.'
>>> print(stroka[1:15:3])
yoлшв
Шаг может быть отрицательным – в этом случае символы будут выбираться, начиная с конца строки:
>>> stroka = 'это пример отрицательного шага'
>>> print(stroka[-1:-15:-4])
а нт
Срез [::-1] может оказаться очень полезным при решении задач, связанных с палиндромами:
>>> stroka = 'А роза упала на лапу Азора'
>>> print(stroka[::-1])
арозА упал ан алапу азор А
Замена символа в строке
Строки в Python относятся к неизменяемым типам данных. По этой причине попытка замены символа по индексу обречена на провал:
>>> stroka = 'mall'
>>> stroka[0] = 'b'
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: 'str' object does not support item assignment
Но заменить любой символ все-таки можно – для этого придется воспользоваться срезами и конкатенацией. Результатом станет новая строка:
>>> stroka = 'mall'
>>> stroka = 'b' + stroka[1:]
>>> print(stroka)
ball
Более простой способ «замены» символа или подстроки – использование метода replace(), который мы рассмотрим ниже.
Полезные методы строк
Python предоставляет множество методов для работы с текстовыми данными. Все методы можно сгруппировать в четыре категории:
- Преобразование строк.
- Оценка и классификация строк.
- Конвертация регистра.
- Поиск, подсчет и замена символов.
Рассмотрим эти методы подробнее.
Преобразование строк
Три самых используемых метода из этой группы – join(), split() и partition(). Метод join() незаменим, если нужно преобразовать список или кортеж в строку:
>>> spisok = ['Я', 'изучаю', 'Python']
>>> stroka = ' '.join(spisok)
>>> print(stroka)
Я изучаю Python
При объединении списка или кортежа в строку можно использовать любые разделители:
>>> kort = ('Я', 'изучаю', 'Django')
>>> stroka = '***'.join(kort)
>>> print(stroka)
Я***изучаю***Django
Метод split() используется для обратной манипуляции – преобразования строки в список:
>>> text = 'это пример текста для преобразования в список'
>>> spisok = text.split()
>>> print(spisok)
['это', 'пример', 'текста', 'для', 'преобразования', 'в', 'список']
По умолчанию split() разбивает строку по пробелам. Но можно указать любой другой символ – и на практике это часто требуется:
>>> text = 'цвет: синий; вес: 1 кг; размер: 30х30х50; материал: картон'
>>> spisok = text.split(';')
>>> print(spisok)
['цвет: синий', ' вес: 1 кг', ' размер: 30х30х50', ' материал: картон']
Метод partition() поможет преобразовать строку в кортеж:
>>> text = 'Python - простой и понятный язык'
>>> kort = text.partition('и')
>>> print(kort)
('Python - простой ', 'и', ' понятный язык')
В отличие от split(), partition() учитывает только первое вхождение элемента-разделителя (и добавляет его в итоговый кортеж).
Оценка и классификация строк
В Python много встроенных методов для оценки и классификации текстовых данных. Некоторые из этих методов работают только со строками, в то время как другие универсальны. К последним относятся, например, функции min() и max():
>>> text = '12345'
>>> print(min(text))
1
>>> print(max(text))
5
В Python есть специальные методы для определения типа символов. Например, isalnum() оценивает, состоит ли строка из букв и цифр, либо в ней есть какие-то другие символы:
>>> text = 'abracadabra123456'
>>> print(text.isalnum())
True
>>> text1 = 'a*b$ra cadabra'
>>> print(text1.isalnum())
False
Метод isalpha() поможет определить, состоит ли строка только из букв, или включает специальные символы, пробелы и цифры:
>>> text = 'программирование'
>>> print(text.isalpha())
True
>>> text2 = 'password123'
>>> print(text2.isalpha())
False
С помощью метода isdigit() можно определить, входят ли в строку только цифры, или там есть и другие символы:
>>> text = '1234567890'
>>> print(text.isdigit())
True
>>> text2 = '123456789o'
>>> print(text2.isdigit())
False
Поскольку вещественные числа содержат точку, а отрицательные – знак минуса, выявить их этим методом не получится:
>>> text = '5.55'
>>> print(text.isdigit())
False
>>> text1 = '-5'
>>> print(text1.isdigit())
False
Если нужно определить наличие в строке дробей или римских цифр, подойдет метод isnumeric():
>>> text = '½⅓¼⅕⅙'
>>> print(text.isdigit())
False
>>> print(text.isnumeric())
True
Методы islower() и isupper() определяют регистр, в котором находятся буквы. Эти методы игнорируют небуквенные символы:
>>> text = 'abracadabra'
>>> print(text.islower())
True
>>> text2 = 'Python bytes'
>>> print(text2.islower())
False
>>> text3 = 'PYTHON'
>>> print(text3.isupper())
True
Метод isspace() определяет, состоит ли анализируемая строка из одних пробелов, или содержит что-нибудь еще:
>>> stroka = ' '
>>> print(stroka.isspace())
True
>>> stroka2 = ' a '
>>> print(stroka2.isspace())
False
Конвертация регистра
Как уже говорилось выше, строки относятся к неизменяемым типам данных, поэтому результатом любых манипуляций, связанных с преобразованием регистра или удалением (заменой) символов будет новая строка.
Из всех методов, связанных с конвертацией регистра, наиболее часто используются на практике два – lower() и upper(). Они преобразуют все символы в нижний и верхний регистр соответственно:
>>> text = 'этот текст надо написать заглавными буквами'
>>> print(text.upper())
ЭТОТ ТЕКСТ НАДО НАПИСАТЬ ЗАГЛАВНЫМИ БУКВАМИ
>>> text = 'зДесь ВСе букВы рАзныЕ, а НУжнЫ проПИСНыЕ'
>>> print(text.lower())
здесь все буквы разные, а нужны прописные
Иногда требуется преобразовать текст так, чтобы с заглавной буквы начиналось только первое слово предложения:
>>> text = 'предложение должно начинаться с ЗАГЛАВНОЙ буквы.'
>>> print(text.capitalize())
Предложение должно начинаться с заглавной буквы.
Методы swapcase() и title() используются реже. Первый заменяет исходный регистр на противоположный, а второй – начинает каждое слово с заглавной буквы:
>>> text = 'пРИМЕР иСПОЛЬЗОВАНИЯ swapcase'
>>> print(text.swapcase())
Пример Использования SWAPCASE
>>> text2 = 'тот случай, когда нужен метод title'
>>> print(text2.title())
Тот Случай, Когда Нужен Метод Title
Поиск, подсчет и замена символов
Методы find() и rfind() возвращают индекс стартовой позиции искомой подстроки. Оба метода учитывают только первое вхождение подстроки. Разница между ними заключается в том, что find() ищет первое вхождение подстроки с начала текста, а rfind() – с конца:
>>> text = 'пример текста, в котором нужно найти текстовую подстроку'
>>> print(text.find('текст'))
7
>>> print(text.rfind('текст'))
37
Такие же результаты можно получить при использовании методов index() и rindex() – правда, придется предусмотреть обработку ошибок, если искомая подстрока не будет обнаружена:
>>> text = 'Съешь еще этих мягких французских булок!'
>>> print(text.index('еще'))
6
>>> print(text.rindex('чаю'))
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
ValueError: substring not found
Если нужно определить, начинается ли строка с определенной подстроки, поможет метод startswith():
>>> text = 'Жила-была курочка Ряба'
>>> print(text.startswith('Жила'))
True
Чтобы проверить, заканчивается ли строка на нужное окончание, используют endswith():
>>> text = 'В конце всех ждал хэппи-енд'
>>> print(text.endswith('енд'))
True
Для подсчета числа вхождений определенного символа или подстроки применяют метод count() – он помогает подсчитать как общее число вхождений в тексте, так и вхождения в указанном диапазоне:
>>> text = 'Съешь еще этих мягких французских булок, да выпей же чаю!'
>>> print(text.count('е'))
5
>>> print(text.count('е', 5, 25))
2
Методы strip(), lstrip() и rstrip() предназначены для удаления пробелов. Метод strip() удаляет пробелы в начале и конце строки, lstrip() – только слева, rstrip() – только справа:
>>> text = ' здесь есть пробелы и слева, и справа '
>>> print('***', text.strip(), '***')
*** здесь есть пробелы и слева, и справа ***
>>> print('***', text.lstrip(), '***')
*** здесь есть пробелы и слева, и справа ***
>>> print('***', text.rstrip(), '***')
*** здесь есть пробелы и слева, и справа ***
Метод replace() используют для замены символов или подстрок. Можно указать нужное количество замен, а сам символ можно заменить на пустую подстроку – проще говоря, удалить:
>>> text = 'В этой строчке нужно заменить только одну "ч"'
>>> print(text.replace('ч', '', 1))
В этой строке нужно заменить только одну "ч"
Стоит заметить, что метод replace() подходит лишь для самых простых вариантов замены и удаления подстрок. В более сложных случаях необходимо использование регулярных выражений, которые мы будем изучать позже.
Практика
Задание 1
Напишите программу, которая получает на вход строку и выводит:
- количество символов, содержащихся в тексте;
- True или False в зависимости от того, являются ли все символы буквами и цифрами.
Решение:
text = input()
print(len(text))
print(text.isalpha())
Задание 2
Напишите программу, которая получает на вход слово и выводит True, если слово является палиндромом, или False в противном случае. Примечание: для сравнения в Python используется оператор ==.
Решение:
text = input().lower()
print(text == text[::-1])
Задание 3
Напишите программу, которая получает строку с именем, отчеством и фамилией, написанными в произвольном регистре, и выводит данные в правильном формате. Например, строка алеКСандр СЕРГЕЕВИЧ ПушкиН должна быть преобразована в Александр Сергеевич Пушкин.
Решение:
text = input()
print(text.title())
Задание 4
Имеется строка 12361573928167047230472012. Напишите программу, которая преобразует строку в текст один236один573928один670472304720один2.
Решение:
text = '12361573928167047230472012'
print(text.replace('1', 'один'))
Задание 5
Напишите программу, которая последовательно получает на вход имя, отчество, фамилию и должность сотрудника, а затем преобразует имя и отчество в инициалы, добавляя должность после запятой.
Пример ввода:
Алексей
Константинович
Романов
бухгалтер
Вывод:
А. К. Романов, бухгалтер
Решение:
first_name, patronymic, last_name, position = input(), input(), input(), input()
print(first_name[0] + '.', patronymic[0] + '.', last_name + ',', position)
Задание 6
Напишите программу, которая получает на вход строку текста и букву, а затем определяет, встречается ли данная буква (в любом регистре) в тексте. В качестве ответа программа должна выводить True или False.
Пример ввода:
ЗонтИК
к
Вывод:
True
Решение:
text = input().lower()
letter = input()
print(letter in text)
Задание 7
Напишите программу, которая определяет, является ли введенная пользователем буква гласной. В качестве ответа программы выводит True или False, буквы могут быть как в верхнем, так и в нижнем регистре.
Решение:
vowels = 'аиеёоуыэюя'
letter = input().lower()
print(letter in vowels)
Задание 8
Напишите программу, которая принимает на вход строку текста и подстроку, а затем выводит индексы первого вхождения подстроки с начала и с конца строки (без учета регистра).
Пример ввода:
Шесть шустрых мышат в камышах шуршат
ша
Вывод:
16 33
Решение:
text, letter = input().lower(), input()
print(text.find(letter), text.rfind(letter))
Задание 9
Напишите программу для подсчета количества пробелов и непробельных символов в введенной пользователем строке.
Пример ввода:
В роще, травы шевеля, мы нащиплем щавеля
Вывод:
Количество пробелов: 6, количество других символов: 34
Решение:
text = input()
nospace = text.replace(' ', '')
print(f"Количество пробелов: {text.count(' ')}, количество других символов: {len(nospace)}")
Задание 10
Напишите программу, которая принимает строку и две подстроки start и end, а затем определяет, начинается ли строка с фрагмента start, и заканчивается ли подстрокой end. Регистр не учитывать.
Пример ввода:
Программирование на Python - лучшее хобби
про
про
Вывод:
True
False
Решение:
text, start, end = input().lower(), input(), input()
print(text.startswith(start))
print(text.endswith(end))
Подведем итоги
В этой части мы рассмотрели самые популярные методы работы со строками – они пригодятся для решения тренировочных задач и в разработке реальных проектов. В следующей статье будем разбирать методы работы со списками.
***
📖 Содержание самоучителя
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
- Анонимные функции
- Рекурсивные функции
- Функции высшего порядка, замыкания и декораторы
- Методы работы с файлами и файловой системой
- Регулярные выражения
- Основы скрапинга и парсинга
- Основы ООП: инкапсуляция и наследование
- Основы ООП – абстракция и полиморфизм
- Графический интерфейс на Tkinter
***
Материалы по теме
- ТОП-15 трюков в Python 3, делающих код понятнее и быстрее
Время чтения 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 очень легко обеспечивает индексирование и нарезку. Мы можем получить доступ к символам, указав положительный и отрицательный индекс.
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 badges89 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
В этом посте мы обсудим, как найти индекс первого вхождения символа в строку в 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 и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 

