yine len(trailing)
almak zorunda olduğundan, ben kaçınarak öneriyoruz Bu durumda .endswith
'un neden olacağı hafif yineleme. Tabii ki, kodun kanıtı zamanlaması, yani, biraz ölçümü (katılımcılar onları öneren sonra işlevlerini adlandırma) yapalım:
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
bu piton dosyası
a.py
adlandırdığınız Say ve İçinde geçerli dizin; Şimdi, ...:
$ 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
, bir "overkills" bir sorun olduğunda sık olduğu gibi, RE tabanlı çözümler ("umutsuzca outclassed" olan Gördüğünüz gibi - nedenleri RE'lerin muhtemelen birine sahip böyle kötü Python topluluğundaki temsilcisi! -), Jack'in yorumundaki öneri, @ Andrew'in orijinalinden daha iyi. String tabanlı çözümler, beklediğim gibi, endswith
ile, shing (@% 15 daha hızlı olmak üzere) üzerinde bir miniscule avantaja sahip olmaktan kaçınarak, shing. Yani, hem saf dize fikirleri iyi (hem özlü hem de açık olmanın yanı sıra) - Ben sadece benim varyantımı biraz tercih ederim, çünkü ben karakterim, tutumlu (bazıları dingin ;-) diyebilirim ki ..) .! "istemeseler değil, israf" -)
olası yinelenen ([Python bir dizenin son 3 karakterleri kaldırın] http://stackoverflow.com/questions/1798465/python-remove-last-3-characters-of- a-string) – outis
olası bir kopyası [Python'daki bir dizenin sonundaki bir alt dizeyi nasıl kaldırırım?] (http://stackoverflow.com/questions/1038824/how-do-i-remove-a-substring- -t-string-in-python) –