Python: substitueix totes les ocurrències d'una subcadena en una cadena
De vegades, mentre treballem amb cadenes de Python, podem tenir un problema en què hem de substituir totes les ocurrències d'una subcadena per una altra.
Entrada: test_str = geeksforgeeks s1 = geeks s2 = abcd
Sortida: test_str = abcdforabcd Explicació: substituïm totes les ocurrències de s1 per s2 a test_str.Entrada: test_str = geeksforgeeks s1 = per a s2 = abcd
Sortida: test_str = geeksabcdgeeks
Enfocament 1
Podem utilitzar la funció incorporada substituir present a python3 per substituir totes les ocurrències de la subcadena.
Implementació mitjançant la funció integrada: -
Python 3
#Python has inbuilt function replace to replace all occurrences of substring.> input_string> => 'geeksforgeeks'> s1> => 'geeks'> s2> => 'abcd'> input_string> => input_string.replace(s1, s2)> print> (input_string)> |
Sortida
abcdforabcd
Complexitat temporal: O(n)
Espai auxiliar: O(n)
Enfocament 2:
S'utilitza la divisió de la cadena per subcadenes i després la substitució per la nova funció string.split().
Python 3
#code for replacing all occurrences of substring s1 with new string s2> test_str> => 'geeksforgeeks'> s1> => 'geeks'> s2> => 'abcd'> #string split by substring> s> => test_str.split(s1)> new_str> => ''> for> i> in> s:> > if> (i> => => ''):> > new_str> +> => s2> > else> :> > new_str> +> => i> #printing the replaced string> print> (new_str)> #contributed by Bhavya Koganti> |
Sortida
abcdforabcd
La complexitat temporal i espacial de tots els mètodes és la mateixa:
Complexitat temporal: O(n)
Espai auxiliar: O(n)
Mètode 3: Un altre enfocament per substituir totes les ocurrències d'una subcadena en una cadena és utilitzar el re.sub() funció del mòdul re a Python.
Python 3
import> re> def> replace_substring(test_str, s1, s2):> > # Replacing all occurrences of substring s1 with s2> > test_str> => re.sub(s1, s2, test_str)> > return> test_str> # test> test_str> => 'geeksforgeeks'> s1> => 'geeks'> s2> => 'abcd'> print> (replace_substring(test_str, s1, s2))> |
Sortida
abcdforabcd
Complexitat temporal: O(n), on n és la longitud de la cadena d'entrada. Això es deu al fet que la funció re.sub() itera per tota la cadena d'entrada i realitza una coincidència d'expressió regular a cada caràcter per trobar totes les ocurrències de la subcadena. El nombre d'iteracions és directament proporcional a la longitud de la cadena d'entrada.
Espai auxiliar: Nou
Mètode 4: Ús d'iteració simple
La idea darrere d'aquest enfocament és iterar a través de la cadena d'entrada caràcter per caràcter i comprovar si cada subcadena de longitud m coincideix amb la subcadena que volem substituir. Si ho fa, afegim la subcadena de substitució al nostre resultat i movem el punter cap endavant amb m caràcters. Si no coincideix, afegim el caràcter actual al resultat i avancem el punter 1 caràcter.
Python 3
def> replace_substring(test_str, s1, s2):> > # Initialize an empty string to store the result> > result> => ''> > # Initialize a variable to keep track of our position in the string> > i> => 0> > # Loop through the string one character at a time> > while> i <> len> (test_str):> > # Check if the current substring matches the substring we want to replace> > if> test_str[i:i> +> len> (s1)]> => => s1:> > # If it does, add the replacement substring to the result and move the pointer forward> > result> +> => s2> > i> +> => len> (s1)> > else> :> > # If it doesn't, add the current character to the result and move the pointer forward> > result> +> => test_str[i]> > i> +> => 1> > # Return the final result> > return> result> # test> test_str> => 'geeksforgeeks'> s1> => 'geeks'> s2> => 'abcd'> print> (replace_substring(test_str, s1, s2))> |
Sortida
abcdforabcd
Complexitat temporal: O(nm), on n és la longitud de la cadena d'entrada i m és la longitud de la subcadena que s'ha de substituir.
Espai auxiliar: O(n), ja que estem creant una nova cadena per emmagatzemar el resultat.