Como obter caractere de string por índice?

93

Vamos dizer que tenho uma string que consiste em x caracteres desconhecidos. Como eu poderia obter char nr. 13 ou char nr. x-14?

TheBW
fonte

Respostas:

131

Primeiro, certifique-se de que o número necessário é um índice válido para a string desde o início ou fim, então você pode simplesmente usar a notação de subscrito de array. use len(s)para obter o comprimento da corda

>>> 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
>>> 
DhruvPathak
fonte
1
Você pode passar inteiros negativos
Aviram Segal
@AviramSegal Obrigado pela correção, sim, podemos, mas eles também devem estar nos limites do comprimento da corda.
DhruvPathak
1
após sua edição, é a melhor resposta, votou positivamente em vez de
negar
1
Essa resposta pode ser melhorada usando uma palavra diferente com caracteres exclusivos em cada índice. Como está, s [3] é ambíguo quanto a qual 'l' ele está retornando.
Seja gentil com os novos usuários de
1
Por que s[-5]pode funcionar, mas s[-6]reclamaria um erro de índice fora do intervalo? Tão curioso sobre a implementação no objeto string em Python.
Alston de
5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

Agora, para intervalos de índice positivo para x é de 0 a 44 (ou seja, comprimento - 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'

Para índice negativo, o índice varia de -1 a -45

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

Para índice negativo, negativo [comprimento -1], ou seja, o último valor válido de índice positivo fornecerá o segundo elemento da lista, pois a lista é lida na ordem inversa,

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

Outros, exemplos de índice,

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'
avasal
fonte
Você deve oferecer uma descrição verbal do que está acontecendo, mesmo que a pergunta possa parecer básica para você.
Hannele
Atualizado a resposta com alguma descrição, espero que ajude :)
avasal
3

As respostas anteriores abrangem cerca de ASCII characterum determinado índice.

É um pouco problemático obter um Unicode characterem um determinado índice no Python 2.

Por exemplo, com o s = '한국中国にっぽん'qual é <type 'str'>,

__getitem__, por exemplo, s[i]não leva você para onde deseja. Ele vai cuspir quase algo assim . (Muitos caracteres Unicode têm mais de 1 byte, mas __getitem__no Python 2 são incrementados em 1 byte.)

Neste caso do Python 2, você pode resolver o problema decodificando:

s = '한국中国にっぽん'
s = s.decode('utf-8')
for i in range(len(s)):
    print s[i]
GyuHyeon Choi
fonte
2

Python.org tem uma seção excelente sobre strings aqui . Role para baixo até onde diz "notação de fatia".

Joel Cornett
fonte
1

Outro exercício recomendado para compreender listas e índices:

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

0
a
1
b
2
c 
Droogans
fonte
0

Isso deve esclarecer ainda mais os pontos:

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')

Entrada 3 Saída m

Entrada -3 Saída p

Arnab Ghosal
fonte
0

Eu acho que isso é mais claro do que descrever em palavras

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
Existência; ilusão
fonte