[英]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.