我有兩個列表轉換所有字母的文件從一個列表到另一個在Python
list1 = ['a', 'b', 'c']
list2 = ['d', 'e', 'f']
我有它隨機文本的變量。
var = 'backout'
我想在變量存在於列表1中list2中的字母的所有字母轉換。
expectedOutput = 'edfkout'
有沒有辦法做到這一點?
我有兩個列表轉換所有字母的文件從一個列表到另一個在Python
list1 = ['a', 'b', 'c']
list2 = ['d', 'e', 'f']
我有它隨機文本的變量。
var = 'backout'
我想在變量存在於列表1中list2中的字母的所有字母轉換。
expectedOutput = 'edfkout'
有沒有辦法做到這一點?
你想用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
。
我們可以按鍵映射到使用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
相互轉換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
對於誰喜歡較短,但更復雜的解決方案(而不是使用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)
是串聯列表的單個元素(在我們的情況下,單個字符)的標準方法。
(取而代之的是空串有可能是一個任意字符串 - 它是用於在連接字符串劃定各元素)
類似的答案已經被@alfasin – Transhuman
@santhosh給出的 - 這是絕對正常的,2個或更多的人在他們的答案同時工作,以不同的速度,他們的答案是相似的,因爲它們是常見的Python化和慣用的方式如何完成任務。我比較慢,正如你可能會注意到的,我的答案要長得多。 – MarianD
是的,這是比我更好的解決方案,很好的工作:-) +1 –