繁体   English   中英

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

[英]Remove equal characters from two python strings

我正在编写 Python 代码,以从位于相同索引上的两个字符串中删除相同的相同字符。 例如remove_same('ABCDE', 'ACBDE')应该使 arguments 成为 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]

我觉得这可能是个问题。

while l_list[i] == r_list[i]:
            l_list.pop(i)
            r_list.pop(i)

这可以减少列表的大小,它可以 go 低于i

如果 l_list = ["a"] 和 r_list = ["a"],请对此进行试运行。

在这种情况下,我会避免使用 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)

可以使用一些列表推导来缩短它,但我试图尽可能明确

在循环中修改列表通常不是一个好主意。 这是一个更干净、更 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']

这里是 go:

def remove_same(l_string, r_string):
    # if either string is empty, return False
    if not l_string or not r_string:
        return False
    l_list = list(l_string)
    r_list = list(r_string)
    limit = min(len(l_list), len(r_list))
    i = 0
    while i < limit:
        if l_list[i] == r_list[i]:
            l_list.pop(i)
            r_list.pop(i)
            limit -= 1
        else:
            i += 1

    return l_list[0] == r_list[0]


print(remove_same('ABCDE', 'ACBDE'))

Output:

False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM