¿Hay alguna manera de subcadenar una cadena 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 dejar la segunda parte significa 'hasta el final', y si deja la primera parte, ¿comienza desde el principio?
Respuestas:
Python llama a este concepto "segmentación" y funciona en algo más que cadenas. Echa un vistazo aquí para una introducción completa.
fuente
Solo por completo 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:
O seleccionar caracteres alternativos sería:
La capacidad de avanzar y retroceder a través de la cadena mantiene la coherencia con la capacidad de agrupar rebanadas desde el principio o el final.
fuente
Substr () normalmente (es decir, PHP y Perl) funciona de esta manera:
Entonces los parámetros son
beginning
yLENGTH
.Pero el comportamiento de Python es diferente; espera comenzar y uno después de FIN (!). Esto es difícil de detectar por los principiantes. Entonces, el reemplazo correcto para Substr (s, principio, LONGITUD) es
fuente
s[beginning:][:length]
Una forma común de lograr esto es mediante el corte de cadenas.
MyString[a:b]
le proporciona una subcadena desde el índice a hasta (b - 1).fuente
Parece que falta un ejemplo aquí: copia completa (superficial).
Este es un lenguaje común para la creación de una copia de tipos de secuencias (no de cadenas internados),
[:]
. Shallow copia una lista, vea la sintaxis de corte de lista de Python utilizada sin razón obvia .fuente
a=b
Debería ser suficiente.[:]
en un tipo inmutable no se hace una copia. Si bienmysequence[:]
es sobre todo inofensivo cuandomysequence
es un tipo inmutable comostr
,tuple
,bytes
(AP3) ounicode
(Py2),a = b[:]
es equivalente aa = b
, que sólo los desechos de un poco de tiempo el envío de los códigos de bytes de rebanado cual responde el objeto a por devolución de sí mismo, ya que no tiene sentido copia superficial cuando , aparte de las pruebas de identidad de objeto, es equivalente a devolver otra referencia al yo inmutable de uno.s[:]
no hace una copia en absoluto:s = 'abc'; s0 = s[:]; assert s is s0
. Sí, era la forma idiomática de copiar una lista en Python hasta que se obtuvieron las listaslist.copy
, pero una porción completa de un tipo inmutable no tiene ninguna razón para hacer una copia porque no se puede cambiar, por lo que puede haber solo una en la memoria y No debemos perder el tiempo copiándolo. Dado que esta respuesta es incorrecta y ni siquiera responde la pregunta , ¿debería eliminarse?Sí, esto realmente funciona si asigna o vincula el nombre
end
a singleton constanteNone
:La notación de corte tiene 3 argumentos importantes:
Sus valores predeterminados cuando no se dan son
None
, pero podemos pasarlos explícitamente:Si, por ejemplo:
Tenga en cuenta que incluimos start en el segmento, pero solo subimos, y no incluimos, stop.
Cuando el paso es
None
, de forma predeterminada, el segmento se utiliza1
para el paso. Si pisas con un entero negativo, Python es lo suficientemente inteligente como para ir desde el final hasta el principio.Explico la notación de corte con gran detalle en mi respuesta a la pregunta Explicar la notación de corte.
fuente
Lo tienes justo a excepción de "fin". Se llama notación de corte. Su ejemplo debería leer:
Si omite el segundo parámetro, es implícitamente el final de la cadena.
fuente
Me gustaría agregar dos puntos a la discusión:
En su
None
lugar, puede usar un espacio vacío para especificar "desde el principio" o "hasta el final":Esto es particularmente útil en funciones, donde no puede proporcionar un espacio vacío como argumento:
Python tiene objetos de corte :
fuente
Si myString contiene un número de cuenta que comienza en el desplazamiento 6 y tiene una longitud 9, entonces puede extraer el número de cuenta de esta manera:
acct = myString[6:][:9]
.Si el OP acepta eso, es posible que quieran probar, de manera experimental,
Funciona: no se genera ningún error y no se produce un "relleno de cadena" predeterminado.
fuente
myString[offset:][:length]
en el caso de OP, simplemente puede usarlomyString[offset:][:]
Tal vez me lo perdí, pero no pude encontrar una respuesta completa en esta página a la (s) pregunta (s) original (s) porque las variables no se analizan más a fondo aquí. Así que tuve que seguir buscando.
Como todavía no se me permite comentar, permítanme agregar mi conclusión aquí. Estoy seguro de que no fui el único interesado en acceder a esta página:
Si dejas la primera parte, obtienes
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):
fuente
Bueno, tuve una situación en la que necesitaba traducir un script PHP a Python, y tenía muchos usos de
substr(string, beginning, LENGTH)
.Si escogiera Python,
string[beginning:end]
tendría que calcular muchos índices finales, por lo que la forma más fácil de usar fuestring[beginning:][:length]
que me ahorró muchos problemas.fuente
El uso de índices codificados en sí puede ser un desastre.
Para evitar eso, Python ofrece un objeto incorporado
slice()
.Si queremos saber cuánto dinero me queda.
Solución normal:
Usando rebanadas:
Usando el corte obtienes legibilidad.
fuente