Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Как по найденному значению в сроке сделать изменение в другой строке

#python


есть строки:

n = 'babab'
m = 'metot'


желаемый результат: new_str = 'MeToT'

то есть, если найдена буква 'b' в первой строке, на этом же месте в строке m буква
должна увеличить регистр.

new_str = (m[0].upper() + m[1] + m[2].upper() + m[3] + m[4].upper())


-- так не подходит, так как места 'b' зависят от введенного текста пользователем.
    


Ответы

Ответ 1



m = 'metot' n = 'babab' new_str = '' for i in range(len(m)): new_str += m[i].upper() if n[i] == 'b' else m[i] print(new_str)

Ответ 2



>>> ''.join([a.upper() if b == 'b' else a for a, b in zip('metot', 'babab')]) 'MeToT' Если данные в numpy массивах: >>> a[b==b'b'[0]] &= 0x5f # upper mask >>> a.tostring() b'MeToT' где a к примеру: >>> numpy.frombuffer(b'metot', dtype=numpy.uint8) array([109, 101, 116, 111, 116], dtype=uint8) Если входные символы в ascii диапазоне, это может быть заметно быстрее для больших строк.

Ответ 3



Вот примитивное и наверняка не самое эффективное решение: In [77]: new_str = ''.join([m[i] if c!='b' else m[i].upper() for i,c in enumerate(n)]) In [78]: new_str Out[78]: 'MeToT' решение с использованием starmap + zip: In [86]: from itertools import starmap In [87]: ''.join(starmap(lambda x,y: y if x!='b' else y.upper(), zip(n,m))) Out[87]: 'MeToT'

Комментариев нет:

Отправить комментарий