使用 Python 2.7 并处理以下字符串替换问题,想知道在算法空间复杂度和算法时间复杂度方面是否有更好的想法?
我创建了一个额外的列表来表示结果,因为字符串 Python 2.7 是不可变的,我还创建了一个额外的字典来加速字符替换表的查找。
例子中,From: "lod"
and To: "xpf"
表示遇到l
,替换为 x
;当遇到o
时,替换为p
;当遇到 d
时,替换为 f
。
'''
Given "data", "from", and "to" fields, replaces all occurrences of the characters in the "from" field in the "data" field, with their counterparts in the "to" field.
Example:
Input:
Data: "Hello World"
From: "lod"
To: "xpf"
Output:
"Hexxp Wprxf"
'''
from collections import defaultdict
def map_strings(from_field, to_field, data):
char_map = defaultdict(str)
result = []
for i,v in enumerate(from_field):
char_map[v]=to_field[i]
for v in data:
if v not in char_map:
result.append(v)
else:
result.append(char_map[v])
return ''.join(result)
if __name__ == "__main__":
print map_strings('lod', 'xpf', 'Hexxp Wprxf')
最佳答案
为此,标准模块中有高效的机制。您首先使用 string.maketrans
构建一个转换表, 然后调用 str.translate
方法:
import string
trans = string.maketrans('lod', 'xpf')
print "Hello World".translate(trans)
输出
Hexxp Wprxf
但是如果您想手动执行此操作,这里有一种比您当前的代码更有效的方法:
def map_strings(from_field, to_field, data):
char_map = dict(zip(from_field, to_field))
return ''.join([char_map.get(c, c) for c in data])
s = map_strings('lod', 'xpf', 'Hello World')
print s
请注意,在 Python 3 中,string.maketrans
函数不再存在。现在有一个 str.maketrans
方法,行为略有不同。
关于python - Python 2.7 中的字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41413726/