Python 给定 2 个列表,去掉相同的中间部分,然后添加 REST 2 列表



在python中,需要定义一个需要2个列表的函数。如果第一个列表的最后一部分与第二个列表的第一部分相同,则删除相同的部分并将其余 2 个列表一起添加。如:

我定义了一个名为前缀的辅助函数,它接受 2 个列表,如果第一个列表是第二个列表的前缀,则返回 true。否则返回 false。

你可以试试:

def merge(seq1, seq2):
    n1 = len(seq1)
    for i in range(n1):
        if seq1[i:] == seq2[:n1-i]:
            return seq1 + seq2[n1-i:]
    return seq1 + seq2
In [52]: merge(['a','a','a'],['g','g','g'])
Out[52]: ['a', 'a', 'a', 'g', 'g', 'g']
In [53]: merge(['a','t','t','a'],['t','t','a','a'])
Out[53]: ['a', 't', 't', 'a', 'a']
In [54]: merge(['a','t','t','a'],['t','t','a','a'])
Out[54]: ['a', 't', 't', 'a', 'a']
In [55]: merge(['a', 'a', 'a', 't', 't', 't', 't'], ['t', 't', 't', 't', 'g', 'g', 'g', 'g'])
Out[55]: ['a', 'a', 'a', 't', 't', 't', 't', 'g', 'g', 'g', 'g']

它不会修改原始列表,但如果需要,您可以轻松执行此操作。(如果您的列表很长且重叠时间很短,则这不是要走的路,因为它从第一个列表的开头开始检查。

def merge(L1, L2):
    middle = []
    while L1 and L2 and L1[-1] == L2[0]:
        middle.append(L2[0])
        L1 = L1[:-2]
        L2 = L2[1:]
    return L1 + middle + L2