str python string

python - str - ¿Hay una manera de subscribir una cadena?



str() python (11)

¿Hay alguna forma de crear una cadena de cadenas en Python para obtener una nueva cadena desde el tercer carácter hasta el final de la cadena?

Tal vez como myString[2:end] ?

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

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

La notación de la rebanada tiene 3 argumentos importantes:

  • comienzo
  • detener
  • paso

Sus valores predeterminados cuando no se proporcionan son None , pero podemos pasarlos explícitamente:

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

Si salir de la segunda parte significa ''hasta el final'', si deja 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 división, pero solo subimos y no incluimos la parada.

Cuando el paso es None , de forma predeterminada, la división usa 1 para el paso. Si pisas con un entero negativo, Python es lo suficientemente inteligente como para ir desde el final hasta el principio.

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

Explico la notación de división en gran detalle en mi respuesta a la pregunta de Explicación de notación de división.

¿Hay alguna forma de crear una cadena de cadenas en Python para obtener una nueva cadena desde el tercer carácter hasta el final de la cadena?

Tal vez como myString[2:end] ?

Si salir de la segunda parte significa ''hasta el final'', si deja la primera parte, ¿comienza desde el principio?


El uso de índices codificados en sí puede ser un desastre.

Para evitar eso, Python ofrece un slice() objeto integrado slice() .

string = "my company has 1000$ on profit, but I lost 500$ gambling."

Si queremos saber cuanto dinero me queda.

Solución normal:

final = int(string[15:19]) - int(string[43:46]) print(final) >>>500

Usando rebanadas:

EARNINGS = slice(15, 19) LOSSES = slice(43, 46) final = int(string[EARNINGS]) - int(string[LOSSES]) print(final) >>>500

Usando la rebanada ganas legibilidad.


Eso es bastante simple:

s = ''Hello, World!'' print(s[:]) # prints "Hello, World!" print(s[:5]) # prints Hello print(s[5:]) # prints , World! print(s[3:7]) # prints "lo, "


Lo tienes justo ahí excepto por "fin". Se llama notación de la rebanada. Tu ejemplo debería leer:

new_sub_string = myString[2:]

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


Me gustaría agregar dos puntos a la discusión:

  1. En su lugar, puede usar None en un espacio vacío para especificar "desde el principio" o "hasta el final":

    ''abcde''[2:None] == ''abcde''[2:] == ''cde''

    Esto es particularmente útil en funciones, donde no puede proporcionar un espacio vacío como argumento:

    def substring(s, start, end): """Remove `start` characters from the beginning and `end` characters from the end of string `s`. Examples -------- >>> substring(''abcde'', 0, 3) ''abc'' >>> substring(''abcde'', 1, None) ''bcde'' """ return s[start:end]

  2. Python tiene objetos de slice :

    idx = slice(2, None) ''abcde''[idx] == ''abcde''[2:] == ''cde''


Parece que falta un ejemplo aquí: copia completa (superficial).

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

Este es un lenguaje común para crear una copia de tipos de secuencia (no de cadenas internadas). [:] Copias superficiales de una lista, vea python-list-slice-used-for-no-obvious-reason .


Solo para estar completo como nadie más lo ha mencionado. El tercer parámetro de un segmento de matriz es un paso. Así que invertir una cadena es tan simple como:

some_string[::-1]

O seleccionar personajes 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 un segmento desde el principio o el final.


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

s = Substr(s, beginning, LENGTH)

Así que los parámetros son beginning y LENGTH .

Pero el comportamiento de Python es diferente; Se espera que comience y una después de FIN (!). Esto es difícil de detectar por los principiantes. Así que el reemplazo correcto para Substr (s, begin, LENGTH) es

s = s[ beginning : beginning + LENGTH]


Tal vez lo perdí, pero no pude encontrar una respuesta completa en esta página a las preguntas originales porque las variables no se analizan más aquí. Así que tuve que seguir buscando.

Como todavía no puedo comentar, permítame agregar mi conclusión aquí. Estoy seguro de que no era el único interesado en acceder a esta página:

>>>myString = ''Hello World'' >>>end = 5 >>>myString[2:end] ''llo''

Si dejas la primera parte, obtienes

>>>myString[:end] ''Hello''

Y si dejó el: en el medio también obtuvo la subcadena más simple, que sería el quinto carácter (el recuento comienza con 0, por lo que es el espacio en blanco en este caso):

>>>myString[end] '' ''


Una forma común de lograr esto es mediante el corte de cuerdas. MyString[a:b] le da una subcadena desde el índice a hasta (b - 1)


>>> 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 "rebanar" y funciona en algo más que cadenas. Echa un vistazo here para una introducción completa.