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?

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

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'

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]

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".


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 

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


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'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.