Maneira pitônica de mesclar duas listas sobrepostas, preservando a ordem
Tudo bem, então eu tenho duas listas, como tal:
Eles podem e terão itens sobrepostos, por exemplo,[1, 2, 3, 4, 5]
, [4, 5, 6, 7]
.Haveránão itens adicionais na sobreposição, por exemplo, issonão acontecer:[1, 2, 3, 4, 5]
, [3.5, 4, 5, 6, 7]
As listas não são necessariamente ordenadas nem únicas.[9, 1, 1, 8, 7]
, [8, 6, 7]
.Quero mesclar as listas para que o pedido existente seja preservado e para mesclar na última posição válida possível e para que nenhum dado seja perdido. Além disso, a primeira lista pode ser enorme. Meu código de trabalho atual é o seguinte:
master = [1,3,9,8,3,4,5]
addition = [3,4,5,7,8]
def merge(master, addition):
n = 1
while n < len(master):
if master[-n:] == addition[:n]:
return master + addition[n:]
n += 1
return master + addition
O que eu gostaria de saber é - existe uma maneira mais eficiente de fazer isso? Funciona, mas estou um pouco desconfiado disso, porque pode executar grandes tempos de execução no meu aplicativo - estou mesclando grandes listas de strings.
EDIT: Eu esperaria que a mesclagem de [1,3,9,8,3,4,5], [3,4,5,7,8] fosse: [1,3,9,8,3,4,57,8]. Para maior clareza, destaquei a parte sobreposta.
[9, 1, 1, 8, 7], [8, 6, 7] devem mesclar para [9, 1, 1, 8, 7, 8, 6, 7]