Как найти букву по номеру 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

kevin nielson's user avatar

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

Volatility's user avatar

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

xiriusly's user avatar

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

pradyunsg's user avatar

pradyunsgpradyunsg

18k11 gold badges43 silver badges94 bronze badges

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

bad_coder's user avatar

bad_coder

10.9k20 gold badges42 silver badges70 bronze badges

asked Feb 19, 2010 at 6:32

user244470's user avatar

0

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

Using find()

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

Using index()

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

From the Python manual

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

And:

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

Tomerikoo's user avatar

Tomerikoo

18.1k16 gold badges45 silver badges60 bronze badges

answered Feb 19, 2010 at 6:35

Eli Bendersky's user avatar

Eli BenderskyEli Bendersky

261k88 gold badges350 silver badges412 bronze badges

1

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

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

which will print: [4, 9]

Jolbas's user avatar

Jolbas

7475 silver badges15 bronze badges

answered Sep 26, 2015 at 7:59

Salvador Dali's user avatar

Salvador DaliSalvador Dali

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

ghostdog74's user avatar

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.Joly's user avatar

A.JolyA.Joly

2,2772 gold badges20 silver badges24 bronze badges

2

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

For example:

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

would return:

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

In that case you can do something like that:

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

Martin Tournoij's user avatar

answered Jul 1, 2015 at 12:40

DimSarak's user avatar

DimSarakDimSarak

4522 gold badges5 silver badges11 bronze badges

1

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

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

Brad Koch's user avatar

Brad Koch

19k19 gold badges107 silver badges137 bronze badges

answered Feb 19, 2010 at 6:37

John Machin's user avatar

John MachinJohn Machin

80.9k11 gold 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

itssubas's user avatar

itssubasitssubas

1632 silver badges11 bronze badges

If you want to find the first match.

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

string.index(value, start, end)

Where:

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

If you want to find all the matches.

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

The pythonic way would be to use enumerate().

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

    indexes_of_match = []

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

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

Or even better with a list comprehension:

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

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


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

answered Jan 26, 2021 at 5:01

Guzman Ojero's user avatar

Guzman OjeroGuzman Ojero

2,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

pylang's user avatar

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's user avatar

Emi OB

2,7943 gold badges13 silver badges28 bronze badges

answered Nov 5, 2021 at 8:44

Chan Kin Sung's user avatar

0

A solution with numpy for quick access to all indexes:

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

answered Jan 15, 2020 at 20:40

Seb's user avatar

SebSeb

3024 silver badges6 bronze badges

2

Время чтения 4 мин.

Строки Python — это массивы байтов, представляющие символы Unicode. Однако в Python нет символьного типа данных, и один символ — это просто строка длиной 1.

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

Доступ к символам в строке по индексу в Python

Содержание

  1. Индексация строк в Python
  2. Доступ к символам строки по индексу
  3. IndexError: индекс строки вне допустимого диапазона
  4. TypeError: строковые индексы должны быть целыми числами
  5. Доступ к строковым символам по отрицательному индексу
  6. Изменение символов в строке с помощью []
  7. Нарезка строк в Python
  8. Заключение

Часто в языках программирования к отдельным элементам в упорядоченном наборе данных можно обращаться напрямую, используя числовой индекс или значение ключа. Этот процесс называется индексацией.

В 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. строка[-1] относится к последнему символу,
  2. string[-2] предпоследний символ и так далее.
  3. Если размер строки равен 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"

Добавить комментарий