从两个 python 字符串中删除相等的字符

我正在编写一个 Python 代码来从位于相同索引上的两个字符串中删除相同的字符。例如,remove_same('ABCDE', 'ACBDE')应该将两个参数设为 BC 和 CB。我知道字符串在这里是不可变的,所以我将它们转换为列表。我收到索引错误。


def remove_same(l_string, r_string):

    l_list = list(l_string)

    r_list = list(r_string)

    i = 0

    while i != len(l_list):

        print(f'in {i} length is {len(l_list)}')

        while l_list[i] == r_list[i]:

            l_list.pop(i)

            r_list.pop(i)

        if i == len(l_list) - 1:

            break

        if i != len(l_list):

            i += 1


    return l_list[0] == r_list[0]


aluckdog
浏览 203回答 4
4回答

繁星coding

在那种情况下我会避免使用 while 循环,我认为这是一个更好更清晰的解决方案:def remove_same(s1, s2):    l1 = list(s1)    l2 = list(s2)    out1 = []    out2 = []    for c1, c2 in zip(l1, l2):        if c1 != c2:            out1.append(c1)            out2.append(c2)                s1_out = "".join(out1)    s2_out = "".join(out2)        print(s1_out)    print(s2_out)它可以使用一些列表理解来缩短,但我试图尽可能明确

浮云间

我觉得这可能是个问题。while l_list[i] == r_list[i]:             l_list.pop(i)             r_list.pop(i)这可以减少列表的大小,它可以低于i.如果 l_list = ["a"] 和 r_list = ["a"],请对此进行预演。

慕雪6442864

在循环中修改列表通常不是一个好主意。这是一个更简洁、更 Pythonic 的解决方案。这两个字符串被压缩并并行处理。每对相等的字符被丢弃,剩余的字符排列成新的字符串。a = 'ABCDE'b = 'ACFDE'def remove_same(s1, s2):    return ["".join(s) for s            in zip(*[(x,y) for x,y in zip(s1,s2) if x!=y])]remove_same(a, b)#['BC', 'CF']

慕尼黑的夜晚无繁华

干得好:def remove_same(l_string, r_string):&nbsp; &nbsp; # if either string is empty, return False&nbsp; &nbsp; if not l_string or not r_string:&nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; l_list = list(l_string)&nbsp; &nbsp; r_list = list(r_string)&nbsp; &nbsp; limit = min(len(l_list), len(r_list))&nbsp; &nbsp; i = 0&nbsp; &nbsp; while i < limit:&nbsp; &nbsp; &nbsp; &nbsp; if l_list[i] == r_list[i]:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_list.pop(i)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r_list.pop(i)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; limit -= 1&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i += 1&nbsp; &nbsp; return l_list[0] == r_list[0]print(remove_same('ABCDE', 'ACBDE'))输出:False
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python