Кто-нибудь может объяснить внутреннее функционирование метода .replace в Python? - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу решить проблему, которая принимает два ввода: 1-я строка и 2-я подстрока. Затем я должен удалить все вхождения подстроки в строке и вернуть оставшуюся часть строки. Без использования метод замены . Теперь, если я знаю длину подстроки, это выполнимо, но что, если длина неизвестна? Спасибо Вот мой ответ, он терпит неудачу, когда есть несколько вхождений подстроки в строке. Теперь все работает правильно.

inputS=input('string?')
inputSub=input('substring?')
s=list(inputS)
sub=list(inputSub)
print(sub)
z=len(s)-len(sub)+1
y=len(sub)
def remove_sub():
    li=[]       #index at which substring is present
    for x in range(z):
        if s[x]==sub[0]:
            if y==1:
                li.append(x)
                continue
            for temp in range(1,y):
                if s[x+temp]==sub[temp]:
                    temp+=1
                    if temp==y:
                        li.append(x)
                    else:
                        print(x)
        else:
            continue
    return(li)
li=remove_sub()
print(li)
temp2=0
for i in range(len(li)): #removing substring
    del s[li[i]+temp2:(li[i]+y+temp2)]
    temp2-=(y)
out=''.join(s)
print(out)

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Это работает и не использует str.replace():

>>> "".join("bananaann".split("an")) 
'ban'

Поместите его в новую функцию, и все готово.

def replace_(original, sub_from, sub_to=""):
    return sub_to.join(original.split(sub_from))

>>> replace_("bananaann", "an")
'ban'
0 голосов
/ 17 апреля 2020
    inputS=input('string?')
inputSub=input('substring?')
s=list(inputS)
sub=list(inputSub)
print(sub)
z=len(s)-len(sub)+1
y=len(sub)
def remove_sub():
    li=[]       #index at which substring is present
    for x in range(z):
        if s[x]==sub[0]:
            if y==1:
                li.append(x)
                continue
            for temp in range(1,y):
                if s[x+temp]==sub[temp]:
                    temp+=1
                    if temp==y:
                        li.append(x)
                    else:
                        print(x)
        else:
            continue
    return(li)
li=remove_sub()
print(li)
temp2=0
for i in range(len(li)): '''removing substrings, works even for multiple occurences'''
    del s[li[i]+temp2:(li[i]+y+temp2)]
    temp2-=(y)
out=''.join(s)
print(out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...