Comment récupérer le caractère d'une chaîne par index?

91

Disons que j'ai une chaîne composée de x caractères inconnus. Comment pourrais-je obtenir le numéro de char. 13 ou char nr. x-14?

TheBW
la source

Réponses:

129

Assurez-vous d'abord que le nombre requis est un index valide pour la chaîne du début ou de la fin, puis vous pouvez simplement utiliser la notation en indice de tableau. utiliser len(s)pour obtenir la longueur de la chaîne

>>> 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
la source
1
Vous pouvez passer des entiers négatifs
Aviram Segal
@AviramSegal Merci pour la correction, Oui, nous pouvons, mais ils devraient aussi être dans les limites de la longueur de la chaîne.
DhruvPathak
1
après votre modification, c'est la meilleure réponse, votée à la hausse plutôt qu'à la baisse :)
Aviram Segal
1
Cette réponse pourrait être améliorée en utilisant un mot différent avec des caractères uniques à chaque index. En l'état, s [3] est ambigu quant au «l» qu'il renvoie.
Soyez gentil avec les nouveaux utilisateurs
1
Pourquoi s[-5]peut fonctionner, mais s[-6]se plaindrait d'une erreur d'index hors de portée? Tellement curieux de savoir l'implémentation dans l'objet string en Python.
Alston
5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

Maintenant, pour les plages d'indice positives pour x est de 0 à 44 (c'est-à-dire longueur - 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'

Pour l'indice négatif, l'indice varie de -1 à -45

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

Pour un index négatif, négatif [longueur -1] c'est-à-dire que la dernière valeur valide de l'index positif donnera le deuxième élément de la liste lorsque la liste est lue dans l'ordre inverse,

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

Autres exemples d'index,

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'
avasal
la source
Vous devriez offrir une description verbale de ce qui se passe, même si la question peut vous sembler fondamentale.
Hannele
Mise à jour de la réponse avec une description, j'espère que cela aidera :)
disponible le
3

Les réponses précédentes couvrent ASCII characterà un certain index.

Il est un peu gênant d'obtenir un Unicode characterà un certain index dans Python 2.

Par exemple, avec s = '한국中国にっぽん'lequel est <type 'str'>,

__getitem__, par exemple, s[i]ne vous mène pas là où vous le désirez. Il crachera quelque chose comme ça . (De nombreux caractères Unicode font plus d'un octet mais __getitem__en Python 2 est incrémenté d'un octet.)

Dans ce cas Python 2, vous pouvez résoudre le problème en décodant:

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

Python.org a une excellente section sur les chaînes ici . Faites défiler jusqu'à l'endroit où il est dit "notation de tranche".

Joel Cornett
la source
1

Un autre exercice recommandé pour comprendre les listes et les index:

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

0
a
1
b
2
c 
Droogans
la source
0

Cela devrait clarifier davantage les points:

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

Entrée 3 Sortie m

Entrée -3 Sortie p

Arnab Ghosal
la source
0

Je pense que c'est plus clair que de le décrire avec des mots

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
Existenceisillusion
la source