Removing the first occurrence of a string from another string in Python

I am trying to write a function that will remove the first occurrence of a string from another string, like:

remove("an", "banana") == "bana"

The goal is not to use a built-in method, but rather to make up my own function using slicing and indexing techniques.

This is what I've tried so far:

def remove(substring, string):
    sublen = len(substring)
    new_string = "" 
  
    for i in range(len(string)): 
        # test if string slices are different from substring and if
        # they are, add them to new_string variable
        if string[i:i+sublen+1] != substring:
            new_string += string[i:i+sublen+1]
    return new_string   

I have come across another post where someone asked the same question as I did (Write a function that removes the first occurrence of a string from another string.), but I could not understand how the solutions offered were supposed to work. I would appreciate it if someone could point me in the right direction, or at least help understand what I'm missing here.

Upvotes: 0

Views: 2086

Answers (3)

Alain T.
Alain T.

Reputation: 42133

DarrylG's string.replace(substring, '', 1) is better but you could also use split and join:

def remove1st(string,substring):
    return "".join(string.split(substring,1)) # 

remove1st("banana","na") # 'bana'

Upvotes: 0

DarrylG
DarrylG

Reputation: 17166

Refactoring your code

def remove(substring, string):
    sublen = len(substring)
    new_string = "" 

    for i in range(len(string)):
    
      if string[i:i+sublen] == substring:
          # found so append remaining string
          new_string += string[i+sublen:]
          break
      else:
          new_string += string[i]  # not found so append character

    return new_string 

print(remove("today", 'today is friday, the last friday of the month')) 

Output

is friday, the last friday of the month

Alternate Solution (from your link)

def remove(substring, string)
    return string.replace(substring, '', 1)

This uses the replace function to replace the first occurrence of a string.

Python String | replace provides a good description of how this works.

Upvotes: 1

hurlenko
hurlenko

Reputation: 1425

You can also use a different approach: after you've found the indexes of the substring, create another string by concatenating two other pieces of the string without the substring:

def remove(substring, string):
    sublen = len(substring)

    for i in range(len(string)):
        if string[i : i + sublen] == substring:
            return string[:i] + string[i + sublen:]
    return string


print(remove("wor", "Hello, world")) # Hello, ld
print(remove("an", "banana"))        # bana
print(remove("x", "banana"))         # banana

Upvotes: 0

Related Questions