Pregunta ¿Hay alguna manera de subscribir una cadena en Python?


¿Hay alguna manera de subscribir una cadena en Python, para obtener una nueva cadena del tercer carácter hasta el final de la cadena?

Tal vez como myString[2:end]?

Si dejar la segunda parte significa "hasta el final", si abandona la primera parte, ¿comienza desde el principio?


1589
2018-03-19 17:29


origen


Respuestas:


>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

Python llama a este concepto "slicing" y funciona en más que solo cadenas. Echar un vistazo aquí para una introducción completa.


2409
2018-03-19 17:30



Solo por completitud ya que nadie más lo ha mencionado. El tercer parámetro para un segmento de matriz es un paso. Entonces, invertir una cadena es tan simple como:

some_string[::-1]

O seleccionando caracteres alternativos sería:

"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"

La capacidad de avanzar y retroceder a través de la cadena mantiene la coherencia con la posibilidad de organizar una división desde el inicio o el final.


305
2018-03-20 00:58



Substr () normalmente (es decir, PHP y Perl) funciona de esta manera:

s = Substr(s, beginning, LENGTH)

Entonces los parámetros son beginning y LENGTH.

Pero el comportamiento de Python es diferente; espera comienzo y uno después de FIN (!). Esto es difícil de detectar por los principiantes. Entonces, el reemplazo correcto para Substr (s, beginning, LENGTH) es

s = s[ beginning : beginning + LENGTH]

91
2017-08-04 11:43



Una forma común de lograr esto es cortando cadenas. MyString[a:b] le da una subcadena del índice a a (b - 1)


45
2018-03-02 05:19



Aquí falta un ejemplo: copia completa (poco profunda).

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>> 

Esta es una expresión común para crear una copia de los tipos de secuencia (no de cadenas internas). [:] Shallow copies a list, See python-list-slice-used-for-no-obvio-razón.


17
2018-03-19 18:02



¿Hay alguna manera de subscribir una cadena en Python, para obtener una nueva cadena del tercer carácter hasta el final de la cadena?

Tal vez como myString[2:end]?

Sí, esto realmente funciona si asigna, o enlazar, el nombre,end, a Singleton constante, None:

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

La notación de división tiene 3 argumentos importantes:

  • comienzo
  • detener
  • paso

Sus valores predeterminados cuando no se dan son None - pero podemos pasarlos explícitamente:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

Si dejar la segunda parte significa "hasta el final", si abandona la primera parte, ¿comienza desde el principio?

Sí, por ejemplo:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

Tenga en cuenta que incluimos el inicio en la porción, pero solo ascendemos, y no incluimos, paramos.

Cuando el paso es None, de forma predeterminada, el sector utiliza 1 para el paso. Si pisa con un entero negativo, Python es lo suficientemente inteligente como para ir desde el principio hasta el final.

>>> myString[::-1]
'0987654321'

Explico la notación de corte en gran detalle en mi respuesta a Explicar la notación de división Pregunta. 


12
2018-06-23 21:53



Lo tienes justo allí excepto por "final". Se llama notación de sectores. Tu ejemplo debería decir:

new_sub_string = myString[2:]

Si omite el segundo parámetro, es implícitamente el final de la cadena.


7
2018-03-19 17:31