Как получить char из строки по индексу?

91

Допустим, у меня есть строка, состоящая из x неизвестных символов. Как я мог получить char nr. 13 или char № х-14?

TheBW
источник

Ответы:

129

Сначала убедитесь, что требуемое число является допустимым индексом для строки от начала или до конца, затем вы можете просто использовать нотацию индекса массива. использовать, len(s)чтобы получить длину строки

>>> s = "python"
>>> s[3]
'h'
>>> s[6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[0]
'p'
>>> s[-1]
'n'
>>> s[-6]
'p'
>>> s[-7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> 
ДхрувПатхак
источник
1
Вы можете передавать отрицательные целые числа
Авирам Сегал,
@AviramSegal Спасибо за исправление, да, мы можем, но они также должны быть в пределах длины строки.
DhruvPathak
1
после вашего редактирования это лучший ответ, проголосовали за, а не против :)
Aviram Segal
1
Этот ответ можно улучшить, используя другое слово с уникальными символами в каждом индексе. В его нынешнем виде s [3] неоднозначно определяет, к какому «l» оно возвращается.
Будьте добры к новым пользователям
1
Почему s[-5]может работать, но s[-6]будет жаловаться на ошибку индекса вне допустимого диапазона? Так любопытно насчет реализации строкового объекта в Python.
Alston
5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

Теперь, для положительных диапазонов индекса для x от 0 до 44 (т.е. длина - 1)

In [3]: x[0]
Out[3]: 'a'
In [4]: x[45]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

/home/<ipython console> in <module>()

IndexError: string index out of range

In [5]: x[44]
Out[5]: 's'

Для отрицательного индекса индекс колеблется от -1 до -45.

In [6]: x[-1]
Out[6]: 's'
In [7]: x[-45]
Out[7]: 'a

Для отрицательного индекса отрицательная [длина -1], то есть последнее действительное значение положительного индекса даст второй элемент списка, поскольку список читается в обратном порядке,

In [8]: x[-44]
Out[8]: 'n'

Другое, примеры указателя,

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'
авазал
источник
Вы должны дать какое-то словесное описание того, что происходит, даже если вопрос может показаться вам простым.
Hannele
Обновил ответ с некоторым описанием, надеюсь, это поможет :)
avasal
3

Предыдущие ответы касаются ASCII characterопределенного индекса.

Получить Unicode characterпо определенному индексу в Python 2 немного затруднительно .

Например, с s = '한국中国にっぽん'которым есть <type 'str'>,

__getitem__, например s[i],, не приведет вас туда, куда вы хотите. Выплюнет что-то вроде . (Многие символы Unicode имеют размер более 1 байта, но __getitem__в Python 2 увеличиваются на 1 байт.)

В этом случае Python 2 вы можете решить проблему путем декодирования:

s = '한국中国にっぽん'
s = s.decode('utf-8')
for i in range(len(s)):
    print s[i]
ГюХён Чой
источник
2

Python.org имеет отличный раздел о строках здесь . Прокрутите вниз до надписи «обозначение среза».

Джоэл Корнетт
источник
1

Еще одно рекомендованное упражнение для понимания списков и индексов:

L = ['a', 'b', 'c']
for index, item in enumerate(L):
    print index + '\n' + item

0
a
1
b
2
c 
Дроганс
источник
0

Это должно дополнительно прояснить моменты:

a = int(raw_input('Enter the index'))
str1 = 'Example'
leng = len(str1)
if (a < (len-1)) and (a > (-len)):
    print str1[a]
else:
    print('Index overflow')

Вход 3 Выход м

Вход -3 Выход p

Арнаб Гхосал
источник
0

Думаю, это понятнее, чем описывать словами

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
Существование
источник