将文档中的所有字母从一个列表转换为 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)
是连接列表的单个元素(在我们的例子中是单个字符)的标准方法。
(而不是 空 字符串可能有一个 任意字符串 - 它用于分隔连接字符串中的各个元素)
我有两个列表
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
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)
是连接列表的单个元素(在我们的例子中是单个字符)的标准方法。
(而不是 空 字符串可能有一个 任意字符串 - 它用于分隔连接字符串中的各个元素)