簡體   English   中英

Python 2.7中的字符串替換

[英]string replace in Python 2.7

使用Python 2.7並處理下面的字符串替換問題,想知道是否在算法空間復雜度和算法時間復雜度方面有更好的主意?

由於字符串python 2.7是不可變的,因此我創建了一個表示結果的附加列表,並且我還創建了一個附加的字典來加快查找字符替換表的速度。

在示例中,From: "lod"和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方法,其行為略有不同。

您也可以使用replace

def map_strings(from_field, to_field, data):
    for f, t in zip(from_field, to_field):
        data = data.replace(f, t)
    return data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM