Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

642
Vistas
Cómo restar cadenas en python

Básicamente, si tengo una cadena 'AJ' y otra cadena 'AJYF' , me gustaría poder escribir 'AJYF'-'AJ' y obtener 'YF' .

Intenté esto pero obtuve un error de sintaxis.

Solo en una nota al margen, el restador siempre será más corto que la cadena de la que se resta. Además, el restador siempre será como la cadena de la que se resta. Por ejemplo, si tengo 'GTYF' y quiero restarle una cadena de longitud 3, esa cadena debe ser 'GTY'.

Si es posible, la función completa que estoy tratando de hacer es convertir una cadena en una lista en función de la longitud que se supone que debe tener cada elemento de la lista. ¿Hay alguna manera de hacer eso?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La solución fácil es:

 >>> string1 = 'AJYF' >>> string2 = 'AJ' >>> if string2 in string1: ... string1.replace(string2,'') 'YF' >>>
over 4 years ago · Santiago Trujillo Denunciar

0

Creo que lo que quieres es esto:

 a = 'AJYF' b = a.replace('AJ', '') print b # produces 'YF' a = 'GTYF' b = a.replace('GTY', '') print b # produces 'F'
over 4 years ago · Santiago Trujillo Denunciar

0

replace puede hacer algo que no desea si la segunda cadena está presente en varias posiciones:

 s1 = 'AJYFAJYF' s2 = 'AJ' if s1.startswith(s2): s3 = s1.replace(s2, '') s3 # 'YFYF'

Puede agregar un argumento adicional para replace para indicar que desea que solo ocurra un reemplazo:

 if s1.startswith(s2): s3 = s1.replace(s2, '', 1) s3 # 'YFAJYF'

O podrías usar el módulo re :

 import re if s1.startswith(s2): s3 = re.sub('^' + s2, '', s1) s3 # 'YFAJYF'

El '^' es para garantizar que s2 se sustituya solo en la primera posición de s1 .

Otro enfoque más, sugerido en los comentarios, sería eliminar los primeros caracteres len(s2) de s1 :

 if s1.startswith(s2): s3 = s1[len(s2):] s3 # 'YFAJYF'

Algunas pruebas que utilizan la magia %timeit en ipython (python 2.7.12, ipython 5.1.0) sugieren que este último enfoque es más rápido:

 In [1]: s1 = 'AJYFAJYF' In [2]: s2 = 'AJ' In [3]: %timeit s3 = s1[len(s2):] The slowest run took 24.47 times longer than the fastest. This could mean that an intermediate result is being cached. 10000000 loops, best of 3: 87.7 ns per loop In [4]: %timeit s3 = s1[len(s2):] The slowest run took 32.58 times longer than the fastest. This could mean that an intermediate result is being cached. 10000000 loops, best of 3: 87.8 ns per loop In [5]: %timeit s3 = s1[len(s2):] The slowest run took 21.81 times longer than the fastest. This could mean that an intermediate result is being cached. 10000000 loops, best of 3: 87.4 ns per loop In [6]: %timeit s3 = s1.replace(s2, '', 1) The slowest run took 17.64 times longer than the fastest. This could mean that an intermediate result is being cached. 1000000 loops, best of 3: 230 ns per loop In [7]: %timeit s3 = s1.replace(s2, '', 1) The slowest run took 17.79 times longer than the fastest. This could mean that an intermediate result is being cached. 1000000 loops, best of 3: 228 ns per loop In [8]: %timeit s3 = s1.replace(s2, '', 1) The slowest run took 16.27 times longer than the fastest. This could mean that an intermediate result is being cached. 1000000 loops, best of 3: 234 ns per loop In [9]: import re In [10]: %timeit s3 = re.sub('^' + s2, '', s1) The slowest run took 82.02 times longer than the fastest. This could mean that an intermediate result is being cached. 100000 loops, best of 3: 1.85 µs per loop In [11]: %timeit s3 = re.sub('^' + s2, '', s1) The slowest run took 12.82 times longer than the fastest. This could mean that an intermediate result is being cached. 100000 loops, best of 3: 1.86 µs per loop In [12]: %timeit s3 = re.sub('^' + s2, '', s1) The slowest run took 13.08 times longer than the fastest. This could mean that an intermediate result is being cached. 100000 loops, best of 3: 1.84 µs per loop
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda