Ash*_*ary 27
你可以使用regex:
>>> import re
>>> strs = "c1309, IF1306, v1309, p1209, a1309, mo1309"
>>> re.sub(r'\d','',strs)
'c, IF, v, p, a, mo'
Run Code Online (Sandbox Code Playgroud)
或更快的版本:
>>> re.sub(r'\d+','',strs)
'c, IF, v, p, a, mo'
Run Code Online (Sandbox Code Playgroud)
timeit 比较:
>>> strs = "c1309, IF1306, v1309, p1209, a1309, mo1309"*10**5
>>> %timeit re.sub(r'\d','',strs)
1 loops, best of 3: 1.23 s per loop
>>> %timeit re.sub(r'\d+','',strs)
1 loops, best of 3: 480 ms per loop
>>> %timeit ''.join([c for c in strs if not c.isdigit()])
1 loops, best of 3: 1.07 s per loop
#winner
>>> %timeit from string import digits;strs.translate(None, digits)
10 loops, best of 3: 20.4 ms per loop
Run Code Online (Sandbox Code Playgroud)
jam*_*lak 21
>>> text = 'mo1309'
>>> ''.join([c for c in text if not c.isdigit()])
'mo'
Run Code Online (Sandbox Code Playgroud)
这比正则表达式更快
python -m timeit -s "import re; text = 'mo1309'" "re.sub(r'\d','',text)"
100000 loops, best of 3: 3.99 usec per loop
python -m timeit -s "import re; text = 'mo1309'" "''.join([c for c in text if not c.isdigit()])"
1000000 loops, best of 3: 1.42 usec per loop
python -m timeit -s "from string import digits; text = 'mo1309'" "text.translate(None, digits)"
1000000 loops, best of 3: 0.42 usec per loop
Run Code Online (Sandbox Code Playgroud)
但str.translate正如@DavidSousa所建议的那样:
from string import digits
text.translate(None, digits)
Run Code Online (Sandbox Code Playgroud)
剥离字符总是最快的.
还itertools提供了一个鲜为人知的函数ifilterfalse
>>> from itertools import ifilterfalse
>>> ''.join(ifilterfalse(str.isdigit, text))
'mo'
Run Code Online (Sandbox Code Playgroud)
Dav*_*usa 13
我认为字符串方法translate比加入列表等更优雅.
from string import digits # digits = '0123456789'
list1 = ['c1309', 'IF1306', 'v1309', 'p1209', 'a1309', 'mo1309']
list2 = [ i.translate(None, digits) for i in list1 ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2166 次 |
| 最近记录: |