用字符串中的'X'替换小写字符最干净,最Pythonic的代码是什么?例如,ABCDEFGhijklmnopQRSTUVwxyz
将变为ABCDEFGXXXXXXXXXQRSTUVXXXX
。
答案 0 :(得分:5)
我为此使用str.translate()
;轻松最快的方法。正则表达式无法触及此速度。
Python 2版本:
import string
map = string.maketrans(string.ascii_lowercase, 'X' * len(string.ascii_lowercase))
mapped = inputstring.translate(map)
Python 3版本:
import string
map = str.maketrans(dict.fromkeys(string.ascii_lowercase, 'X'))
mapped = inputstring.translate(map)
演示(Python 2):
>>> import string
>>> inputstring = 'ABCDEFGhijklmnopQRSTUVwxyz'
>>> map = string.maketrans(string.ascii_lowercase, 'X' * len(string.ascii_lowercase))
>>> inputstring.translate(map)
'ABCDEFGXXXXXXXXXQRSTUVXXXX'
str.translate()
订单更快
>>> import timeit
>>> import re
>>> def regex_replace(s, _sub=re.compile(r'[a-z]').sub):
... return _sub('X', s)
...
>>> regex_replace(inputstring)
'ABCDEFGXXXXXXXXXQRSTUVXXXX'
>>> timeit.timeit('f(s)', 'from __main__ import regex_replace as f, inputstring as s')
2.6076979637145996
>>> timeit.timeit('s.translate(m)', 'from __main__ import inputstring as s, map as m')
0.13378620147705078
str.translate()
版本可以更快地完成 20次的任务。
答案 1 :(得分:4)
非常简单:
>>> import re
>>> S='ABCDEFGhijklmnopQRSTUVwxyz'
>>> re.sub('[a-z]', 'X', S)
'ABCDEFGXXXXXXXXXQRSTUVXXXX'
答案 2 :(得分:3)
您可以使用正则表达式:
import re
output = re.sub( r'[a-z]', 'X', inputString )