Wystarczy trochę logiki do drugiego indeksu.
Jeśli polecenie zakłada fragment od pierwszego znaku L1 do ostatniego L2:
def usun(s, l1, l2):
return "".join(s.split(s[s.index(l1):abs(s[::-1].index(l2)-len(s))]))
Jeśli zakłada fragment od pierwszego znaku L1 do najbliższego następnego L2:
def usun(s, l1, l2):
return "".join(s.split(s[s.index(l1):s[s.index(l1)+1:].index(l2)+s.index(l1)+2]))
Oczywiście można dać zmienne pomocnicze by było czytelne, oraz działało szybciej bez liczenia tego samego po kilka razy ;p. Ale podejrzewam że to nie jest kod który będzie działał przez XXX godzin uruchamiany X mln razy, więc powinno być ok :P
@Edit:
Oczywiście można to zrobić z metodą replace, tylko że zamieni nam wszystkie takie fragmenty na to co podamy po "".
Możemy wtedy dodać warunek opcjonalny ile takich fragmentów ma zamienić, jednak wtedy zrobi to dla podanej ilości fragmentów od początku.
Ale by być szczerym, nie ma opcji aby to działało dobrze dla dużych plików tekstowych, a użyteczność takiej funkcji jest śmieszna.
Wybieranie fragmentów po znakach, służy co najwyżej do celów edukacyjnych :)