Как вы можете удалить похожие символы в тех же позициях в 2 строки - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно найти способ удаления общих символов из двух строк, если общие символы находятся в одной позиции, но это не работает, и я пытаюсь это выяснить. Это то, что я пробовал до сих пор, это работает для некоторых строк, но как только вторая строка становится больше первой, она перестает работать. РЕДАКТИРОВАТЬ: мне также нужен способ сохранить результат в переменной перед печатью, как мне нужно использовать его в другой функции.

Пример:

ABCDEF и ABLDKG приведет к «ABD "части обеих строк должны быть удалены, но остальная часть строки останется той же самой CEF, и LKG будет выводом

def compare(input1,input2):
if len(input1) < len(input2):
    for i in input1:
        posi = int(input1.find(i))
        if input1[num] ==  input2[num]:
            x =   input1.replace(i,"" )
            y =  input2.replace(i,"" )
         num = num+1

    print(x)
    print(y)
else:
    for i in input2:
        num = 0
        posi = int(input2.find(i))
        if input2[num] ==  input1[num]:
            input1 =  input1[0:num] + input1[num+1:(len(input1)+ 1 )] # input1.replace(i,"" )
            input2 =  input2[0:num] + input2[num+1:(len(input1) + 1)]
            x = input1
            y = input2

        num = num + 1
print(str(x))
print(str(y))

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

вы можете использовать

from itertools import zip_longest
a,b = "ABCDEF","ABLDKG"
[''.join(k) for k in zip(*[i for i in zip_longest(a, b, fillvalue = "") if i[0]!=i[1]])]
['CEF', 'LKG']

Вы можете заключить это в функцию:

def compare(a, b):
    s = zip(*[i for i in zip_longest(a, b, fillvalue = "") if i[0]!=i[1]])
    return [''.join(k) for k in s]


 compare("ABCDEF","ABLDKG")
['CEF', 'LKG']

 compare('asdfq', 'aqdexyz')
['sfq', 'qexyz']
0 голосов
/ 04 февраля 2020
strlist = ["ABCDEF","ABLDKG"]
char_dict = dict()
for item in strlist:
    for char in item:
        char_dict[char] = char_dict.get(char,0) + 1
new_strlist = []
for item in strlist:
    new_strlist.append(''.join([char for char in item if char_dict[char] < 2]))

Обратите внимание, что это преобразует строки, которые имеют только дубликаты, в пустые строки, а не удаляет их полностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...