将文档中的所有字母从一个列表转换为 Python 中的另一个列表

Converting all letters in a document from one list to another in Python

我有两个列表

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

我有一个带有随机文本的变量。

var = 'backout'

我想将 list1 中存在的变量中的所有字母转换为 list2 中的字母。

expectedOutput = 'edfkout'

有办法吗?

您想在 Python 中使用 str.translate using a translation table from string.maketrans (This is str.maketrans 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

使用 map(ord,list1) 将每个字符转换为其 ascii 值,并使用 zip

进行 1-1 映射 b/w list1 和 list2
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)

1st 参数是一个 key - 如果它 在键中找到 ,我们得到它的值:trans_dict[ch]

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

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

是一个列表理解 - 类似于从 空列表 创建列表,在 for 循环中附加下一个和下一个元素。

''.join(list_of_string) 

连接列表的单个元素(在我们的例子中是单个字符)的标准方法。
(而不是 字符串可能有一个 任意字符串 - 它用于分隔连接字符串中的各个元素)