代码之家  ›  专栏  ›  技术社区  ›  Evan

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

  •  2
  • Evan  · 技术社区  · 7 年前

    我有两份清单

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

    var = 'backout'

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

    expectedOutput = 'edfkout'

    有办法做到这一点吗?

    4 回复  |  直到 7 年前
        1
  •  7
  •   Patrick Haugh    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 .

        2
  •  0
  •   Nir Alfasi    7 年前

    我们可以使用 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
    
        3
  •  0
  •   Transhuman    7 年前

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

    tbl = dict(zip(map(ord,list1), map(ord,list2)))
    var.translate(tbl)
    

    edfkout
    
        4
  •  0
  •   MarianD    7 年前

    对于喜欢较短但更复杂的解决方案(而不是使用 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 参数是 -如果 已找到 在键中,我们获得其值: trans_dict[ch]

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

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

    是列表理解-从 空列表 ,在 for

    ''.join(list_of_string) 
    

    串联列表的各个元素 (在我们的例子中,是单个字符)。
    空的 字符串可能有一个 任意字符串 -它用于分隔串联字符串中的单个元素)