Как объединить два списка строк с несколькими заменами символов - PullRequest
3 голосов
/ 10 марта 2019

У меня есть два списка строк.

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

Я хочу объединить их так, чтобы получился результат:

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

То есть, если в списке B есть 'M', я хочу сохранить его, иначе я хочу заменить его значением в этом индексе 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 ]

1 голос
/ 10 марта 2019

Вы можете использовать функцию 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']
0 голосов
/ 10 марта 2019

Вы можете использовать zip и str.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']
0 голосов
/ 10 марта 2019

Игра с zip с и map с

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...