Tei*_*ion 30 python string replace
是否有一个更短的方式来编写以下代码?
my_string = my_string.replace('A', '1')
my_string = my_string.replace('B', '2')
my_string = my_string.replace('C', '3')
my_string = my_string.replace('D', '4')
my_string = my_string.replace('E', '5')
Run Code Online (Sandbox Code Playgroud)
请注意,我不需要替换那些确切的值; 我只是想找到一种方法将5+行变成少于5行
Ric*_*and 58
看起来像是一个使用循环的好机会:
mapping = { 'A':'1', 'B':'2', 'C':'3', 'D':'4', 'E':'5'}
for k, v in mapping.iteritems():
my_string = my_string.replace(k, v)
Run Code Online (Sandbox Code Playgroud)
如果你不介意括号,更快的方法是:
mapping = [ ('A', '1'), ('B', '2'), ('C', '3'), ('D', '4'), ('E', '5') ]
for k, v in mapping:
my_string = my_string.replace(k, v)
Run Code Online (Sandbox Code Playgroud)
Mat*_*kel 40
您可以轻松使用string.maketrans()创建传递给str.translate()的映射字符串:
import string
trans = string.maketrans("ABCDE","12345")
my_string = my_string.translate(trans)
Run Code Online (Sandbox Code Playgroud)
Dar*_*con 12
如果你想慢慢得到错误的答案,那么在循环中使用string.replace.(虽然它在这种模式和替换之间没有重叠的情况下确实有效.)
对于可能重叠或长主题字符串的一般情况,请使用re.sub:
import re
def multisub(subs, subject):
"Simultaneously perform all substitutions on the subject string."
pattern = '|'.join('(%s)' % re.escape(p) for p, s in subs)
substs = [s for p, s in subs]
replace = lambda m: substs[m.lastindex - 1]
return re.sub(pattern, replace, subject)
>>> multisub([('hi', 'bye'), ('bye', 'hi')], 'hi and bye')
'bye and hi'
Run Code Online (Sandbox Code Playgroud)
对于单字符模式和1-或0字符替换的特殊情况,请使用string.maketrans.
replaceDict = {'A':'1','B':'2','C':'3','D':'4','E':'5'} for key, replacement in replaceDict.items(): my_string = my_string.replace( key, replacement )
小智 6
我认为这可能会更有效一些:
mapping = { 'A':'1', 'B':'2', 'C':'3', 'D':'4', 'E':'5'}
my_string = "".join([mapping[c] if c in mapping else c for c in my_string])
Run Code Online (Sandbox Code Playgroud)
我建议使用“timeit”进行一些基准测试,并以“my_string”长度为基础的真实案例。
归档时间: |
|
查看次数: |
43422 次 |
最近记录: |