我有一堆字符串
他们中的一些人 ' rec'
我想删除它只有那些是最后4个字符
再说一句话
somestring='this is some string rec'
Run Code Online (Sandbox Code Playgroud)
我希望它是:
somestring='this is some string'
Run Code Online (Sandbox Code Playgroud)
什么是python方法来解决这个问题?
Jac*_*lly 74
def rchop(thestring, ending):
if thestring.endswith(ending):
return thestring[:-len(ending)]
return thestring
somestring = rchop(somestring, ' rec')
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 22
因为你必须得到len(trailing)(如果trailing你想要删除的字符串在哪里),我建议避免.endswith在这种情况下导致的轻微重复工作.当然,代码的证明是在时间上,所以,让我们做一些测量(在受访者提出之后命名函数):
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
Run Code Online (Sandbox Code Playgroud)
假设我们已经命名了这个python文件a.py并且它位于当前目录中; 现在,...:
$ 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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,基于RE的解决方案"无可救药地超越"(通常在一个"过度杀伤"问题时发生 - 可能是RE在Python社区中有如此糟糕的代表的原因之一! - ),尽管建议在@ Jack的评论比@ Andrew的原创评论要好.正如预期的那样,基于字符串的解决方案与我的 - endswith避免- 解决方案相比@ Jack's具有微不足道的优势(仅快15%).所以,两个纯粹的想法都是好的(以及简洁和清晰) - 我更喜欢我的变体只是因为我,通过性格,节俭(有些人可能会说,吝啬;-)人.. . "浪费不可"!-)
Per*_*sen 17
如果速度不重要,请使用正则表达式:
import re
somestring='this is some string rec'
somestring = re.sub(' rec$', '', somestring)
Run Code Online (Sandbox Code Playgroud)
Xav*_*hot 15
从 开始Python 3.9,您可以使用removesuffix:
'this is some string rec'.removesuffix(' rec')
# 'this is some string'
Run Code Online (Sandbox Code Playgroud)
这是杰克凯利的答案及其兄弟姐妹的单行版本:
def rchop(s, sub):
return s[:-len(sub)] if s.endswith(sub) else s
def lchop(s, sub):
return s[len(sub):] if s.startswith(sub) else s
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46668 次 |
| 最近记录: |