【发布时间】:2026-02-23 08:45:01
【问题描述】:
在字符串中用“X”替换小写字符的最简洁、最符合 Python 风格的代码是什么?例如,ABCDEFGhijklmnopQRSTUVwxyz 将变为 ABCDEFGXXXXXXXXXQRSTUVXXXX。
【问题讨论】:
在字符串中用“X”替换小写字符的最简洁、最符合 Python 风格的代码是什么?例如,ABCDEFGhijklmnopQRSTUVwxyz 将变为 ABCDEFGXXXXXXXXXQRSTUVXXXX。
【问题讨论】:
我会为此使用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 倍。
【讨论】:
很简单:
>>> import re
>>> S='ABCDEFGhijklmnopQRSTUVwxyz'
>>> re.sub('[a-z]', 'X', S)
'ABCDEFGXXXXXXXXXQRSTUVXXXX'
【讨论】:
你可以使用正则表达式:
import re
output = re.sub( r'[a-z]', 'X', inputString )
【讨论】: