python,给出2个列表,取出相同的中间部分,然后添加休息2列表

时间:2015-01-18 01:26:53

标签: python list

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

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

2 个答案:

答案 0 :(得分:1)

你可以尝试:

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']

它不会修改原始列表,但如果需要,您可以轻松完成此操作。 (如果您的列表很长且重叠很短,那么这就不行了,因为它从第一个开始检查。)

答案 1 :(得分:0)

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