2017-10-18 63 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

相關問題