Dal momento che si deve ottenere len(trailing)
comunque (dove trailing
è la stringa che si desidera rimuovere se si tratta di finale), mi consiglia di evitare la leggera duplicazione del lavoro che .endswith
causerebbe in questo caso. Naturalmente, la prova del codice è nella tempistica, quindi, cerchiamo di fare un po 'di misura (nomi delle funzioni dopo gli intervistati proponendoli):
import re
astring = 'this is some string rec'
trailing = ' rec'
def andrew(astring=astring, trailing=trailing):
regex = r'(.*)%s$' % re.escape(trailing)
return re.sub(regex, r'\1', astring)
def jack0(astring=astring, trailing=trailing):
if astring.endswith(trailing):
return astring[:-len(trailing)]
return astring
def jack1(astring=astring, trailing=trailing):
regex = r'%s$' % re.escape(trailing)
return re.sub(regex, '', astring)
def alex(astring=astring, trailing=trailing):
thelen = len(trailing)
if astring[-thelen:] == trailing:
return astring[:-thelen]
return astring
dire che abbiamo chiamato questo file python a.py
ed è in directory corrente; ora, ...:
$ python2.6 -mtimeit -s'import a' 'a.andrew()'
100000 loops, best of 3: 19 usec per loop
$ python2.6 -mtimeit -s'import a' 'a.jack0()'
1000000 loops, best of 3: 0.564 usec per loop
$ python2.6 -mtimeit -s'import a' 'a.jack1()'
100000 loops, best of 3: 9.83 usec per loop
$ python2.6 -mtimeit -s'import a' 'a.alex()'
1000000 loops, best of 3: 0.479 usec per loop
Come si vede, le soluzioni RE-based sono "irrimediabilmente surclassati" (come spesso accade quando uno "overkills" Un problema - forse uno dei motivi ER hanno una cattiva rep nella comunità Python! -), anche se il suggerimento nel commento di @ Jack è molto meglio di quello originale di @ Andrew. Le soluzioni basate su stringhe, come previsto, shing, con il mio endswith
-avvertendo uno con un vantaggio minuscolo su @ Jack (essendo solo il 15% più veloce). Quindi, entrambe le idee di pura stringa sono buone (oltre ad essere concise e chiare) - Preferisco la mia variante un po 'solo perché sono, per carattere, una persona frugale (qualcuno potrebbe dire, avara ;-) .. . "rifiuti non, non vuole", -)
possibile duplicato del [Python Rimuovere gli ultimi 3 caratteri di una stringa] (http://stackoverflow.com/questions/1798465/python-remove-last-3-characters-of- a-string) – outis
possibile duplicato di [Come rimuovere una sottostringa dalla fine di una stringa in Python?] (http://stackoverflow.com/questions/1038824/how-do-i-remove-a-substring- dalla fine alla fine di una stringa in python) –