2017-10-18 64 views

回答

7

你想用str.translate使用转换表从string.maketrans(这是str.maketrans在Python 3)

from string import maketrans 

s1 = 'abc' 
s2 = 'def' 
table = maketrans(s1, s2) 
print('backout'.translate(table)) 

编辑:

请注意,我们必须使用字符串代替列表作为我们的参数maketrans

+0

是的,这是比我更好的解决方案,很好的工作:-) +1 –

0

我们可以按键映射到使用zip()包裹着dict()值,然后重复的字母和他们本身是默认的映射到它们相应的一些(如果未找到):

keys = ['a', 'b', 'c'] 
values = ['d', 'e', 'f'] 
mapper = dict(zip(keys, values)) 
var = 'backout' 
output = "".join([mapper.get(k, k) for k in var]) 
print(output) # edfkout 
0

相互转换CHAR到其ASCII值使用map(ord,list1)和使用做1-1映射的b/W和list1的list2中zip

tbl = dict(zip(map(ord,list1), map(ord,list2))) 
var.translate(tbl) 

输出:

edfkout 
0

对于谁喜欢较短,但更复杂的解决方案(而不是使用translate()法)的人,那就是:

list1 = ['a', 'b', 'c'] 
list2 = ['d', 'e', 'f'] 
var = 'backout' 

trans_dict = dict(zip(list1, list2)) 
out_string = ''.join([trans_dict.get(ch, ch) for ch in var]) 

的解释:

dict(zip(list1, list2)) 

创建{'a': 'd', 'b': 'e', 'c': 'f'}字典。

trans_dict.get(ch, ch) 

的1 ST参数是一个关键 - 如果它发现中的键,我们得到它的值:trans_dict[ch]

的2 第二参数是一个默认值 - 如果在键中找不到第一个参数,则使用它。我们获得ch

[trans_dict.get(ch, ch) for ch in var] 

是一个列表理解 - 这是从空列表创建列表,下一个追加和下一个元素在for循环。

''.join(list_of_string) 

串联列表的单个元素(在我们的情况下,单个字符)的标准方法。
(取而代之的是串有可能是一个任意字符串 - 它是用于在连接字符串划定各元素)

+0

类似的答案已经被@alfasin – Transhuman

+0

@santhosh给出的 - 这是绝对正常的,2个或更多的人在他们的答案同时工作,以不同的速度,他们的答案是相似的,因为它们是常见的Python化和惯用的方式如何完成任务。我比较慢,正如你可能会注意到的,我的答案要长得多。 – MarianD

相关问题