在python中,需要定义一个带有2个列表的函数。如果第一个列表的最后一部分与第二个列表的第一部分相同,则删除相同的部分并将其余2个列表添加到一起。如:
我已经定义了一个名为prefix的辅助函数,它接受2个列表,如果第一个列表是第二个列表的前缀,则返回true。否则返回false。
答案 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