如何合并具有多个字符替换的两个字符串列表

时间:2019-03-09 23:01:12

标签: python string list loops replace

我有两个字符串列表。

A = ['HKO', 'HKO', 'HKO'] 
B = ['12M', 'M4M', 'MKO']

我要合并它们,使结果为:

C = ['HKM', 'MKM', 'MKO']

也就是说,如果列表'M'中有一个B,我想保留它,否则我想用那个索引A中的值替换它。

做到这一点的最佳方法是什么?我一直遇到的问题是B的'M4M',因此我无法同时替换'H''O'。例如,我将得到:

['HKM', 'MKO', 'HKM'] 

谢谢。 (到目前为止,我的代码在下面!)

replace_list = [(0, 2), (1, 0), (1, 2), (2, 0)]

list = []
for i in range(len(mix_list)):
    for j in range(len(letters)):
        if j != replace_list[i][1]:
            list.append(letters[i][j])
        else:
            list.append('M')
    list_join = ("".join(list))

    print list
print "join", list_join

我能得到的:加入HKMMKOHKM

3 个答案:

答案 0 :(得分:1)

您可以将函数map()与辅助函数func()结合使用:

A = ['HKO', 'HKO', 'HKO']
B = ['12M', 'M4M', 'MKO']

def func(a, b):
    if 'M' in b:
        m = map(lambda x, y:
            y if y == 'M' else x, a, b)
        return ''.join(m)
    else:
        return a

list(map(func, A, B))
# ['HKM', 'MKM', 'MKO']

答案 1 :(得分:0)

zipmap s

f = lambda s: ''.join([a if b !='M' else b for a, b in s])
list(map(f, (map(lambda k: zip(*k), zip(A,B)))))

输出

['HKM', 'MKM', 'MKO']

答案 2 :(得分:0)

您可以使用zipstr.join

A = ['HKO', 'HKO', 'HKO'] 
B = ['12M', 'M4M', 'MKO']
result = [''.join(d if d == 'M' else c for c, d in zip(a, b)) for a, b in zip(A, B)]

输出:

['HKM', 'MKM', 'MKO']