我有两个列表转换所有字母的文件从一个列表到另一个在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 –