¿Cómo obtener caracteres de cadena por índice?

91

Digamos que tengo una cadena que consta de x caracteres desconocidos. ¿Cómo podría obtener el char nr. 13 o char nr. x-14?

TheBW
fuente

Respuestas:

129

Primero asegúrese de que el número requerido sea un índice válido para la cadena desde el principio o el final, luego puede simplemente usar la notación de subíndice de matriz. usar len(s)para obtener la longitud de la cuerda

>>> 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
fuente
1
Puede pasar enteros negativos
Aviram Segal
@AviramSegal Gracias por la corrección, sí podemos, pero también deberían estar en los límites de la longitud de la cadena.
DhruvPathak
1
después de su edición, es la mejor respuesta, votada hacia arriba en lugar de hacia abajo :)
Aviram Segal
1
Esta respuesta podría mejorarse utilizando una palabra diferente con caracteres únicos en cada índice. Tal como está, s [3] es ambiguo en cuanto a cuál 'l' está regresando.
Sea amable con los nuevos usuarios
1
¿Por qué s[-5]puede funcionar, pero s[-6]se quejaría de un error de índice fuera de rango? Tengo mucha curiosidad por la implementación en el objeto de cadena en Python.
Alston
5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

Ahora, para rangos de índices positivos para x es de 0 a 44 (es decir, longitud - 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 el índice negativo, el índice varía de -1 a -45

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

Para el índice negativo, negativo [longitud -1], es decir, el último valor válido del índice positivo dará el segundo elemento de la lista ya que la lista se lee en orden inverso,

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

Otros, ejemplos de índices,

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'
avasal
fuente
Debe ofrecer una descripción verbal de lo que está sucediendo, aunque la pregunta pueda parecerle básica.
Hannele
Se actualizó la respuesta con una descripción, espero que ayude :)
avasal
3

Las respuestas anteriores cubren aproximadamente ASCII characteren un determinado índice.

Es un poco problemático obtener un Unicode characteríndice determinado en Python 2.

Por ejemplo, con s = '한국中国にっぽん'cuál es <type 'str'>,

__getitem__, por ejemplo, s[i]no te lleva a donde deseas. Escupirá algo así como . (Muchos caracteres Unicode tienen más de 1 byte, pero __getitem__en Python 2 se incrementa en 1 byte).

En este caso de Python 2, puede resolver el problema decodificando:

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

Python.org tiene una excelente sección sobre cadenas aquí . Desplácese hacia abajo hasta donde dice "notación de corte".

Joel Cornett
fuente
1

Otro ejercicio recomendado para comprender listas e índices:

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

0
a
1
b
2
c 
Droogans
fuente
0

Esto debería aclarar aún más los puntos:

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

Entrada -3 Salida p

Arnab Ghosal
fuente
0

Creo que esto es más claro que describirlo con palabras.

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
Existenciaisilusión
fuente