Удаление первого вхождения строки из другой строки в Python - PullRequest
0 голосов
/ 10 апреля 2020

Я полный новичок ie в программировании, и я использую «Как думать, как ученый», чтобы ориентироваться на Python.

Я пытаюсь написать функцию это удалит первое вхождение строки из другой строки, например: remove ("an", "banana") == "bana. Цель - не , чтобы использовать встроенный метод, а скорее чтобы создать свою собственную функцию, используя методы нарезки и индексации.

Это то, что я пробовал до сих пор:

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   

Я наткнулся на другой пост, где кто-то задавал тот же вопрос, что и Я сделал ( Напишите функцию, которая удаляет первое вхождение строки из другой строки. ), но я не мог понять, как должны работать предлагаемые решения. Я был бы признателен, если бы кто-то мог указать мне правильное направление, или, по крайней мере, помогите понять, чего мне здесь не хватает.

Заранее большое спасибо!

РЕДАКТИРОВАТЬ благодаря очень полезным комментариям я понял, как реорганизовать мою компанию де, чтобы сделать эту работу:

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

    for i in range(len(string)): 
        #find if slice of string and substring match.
        if string[i:i+sublen] == substring:
            #if true add slice and rest of string to new_string
            new_string += string[i+sublen:]
            break
        else:
             new_string += string[i] #add only the character = to loop 
                                     #variable
    return new_string   

Ответы [ 4 ]

0 голосов
/ 10 апреля 2020

Ответ Дэрила прост и удобен.

def remove (substring, string): вернуть string.replace (substring, '', 1)

print (remove ("an », "банан"))

0 голосов
/ 10 апреля 2020

Вы также можете использовать другой подход: после того, как вы нашли индексы подстроки, создайте еще одну строку, объединив два других фрагмента строки без подстроки:

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

0 голосов
/ 10 апреля 2020

DarryIG's string.replace(substring,'',1) лучше, но вы также можете использовать split и join:

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

remove1st("banana","na") # 'bana'
0 голосов
/ 10 апреля 2020

Рефакторинг вашего кода

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')) 

Вывод

is friday, the last friday of the month

Альтернативное решение (по вашей ссылке)

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

Используется функция замены для замены первого вхождения строки.

Python String | замена дает хорошее описание того, как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...