python - Python 2.7 中的字符串替换

标签 python algorithm python-2.7

使用 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/

相关文章:

python - 将 4 个 uint_8 值转换为 python 中的 float

linux - 如果 python 脚本因错误而停止,请重新启动树莓派

python - 如何使用 Python 内置函数 odeint 求解微分方程?

python - 以这种格式将字典导出到文本文件

python - 在一个范围内生成多组随机的、不重叠的间隔

识别网页物理地址的算法

算法最优填充

python - Zapier 给出错误 : `' unicode' object has no attribute 'copy' ` for Python script

python - Selenium Firefox Webdriver 抛出 URLError

algorithm - 使用开放链和单独寻址检查成员资格