Хорошо, поэтому у меня есть два списка:
- Они могут иметь и будут иметь перекрывающиеся элементы, например
[1, 2, 3, 4, 5]
,[4, 5, 6, 7]
. - В перекрытии не будет дополнительных элементов, например, этого не произойдет:
[1, 2, 3, 4, 5]
,[3.5, 4, 5, 6, 7]
- Списки не обязательно упорядочены и не уникальны.
[9, 1, 1, 8, 7]
,[8, 6, 7]
.
Я хочу объединить списки, чтобы сохранился существующий порядок и слияние в последней возможной допустимой позиции, и чтобы данные не терялись. Кроме того, первый список может быть огромным. Мой текущий рабочий код таков:
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
То, что я хотел бы знать, - есть ли более эффективный способ сделать это? Он работает, но я немного извиняюсь за это, потому что он может работать в больших режимах выполнения в моем приложении - я объединяю большие списки строк.
EDIT: Я ожидаю, что слияние [1,3,9,8,3,4,5], [3,4,5,7,8] будет следующим: [1,3,9,8 3,4,5, 7,8]. Для ясности я выделил перекрывающуюся часть.
[9, 1, 1, 8, 7], [8, 6, 7] должны сливаться с [9, 1, 1, 8, 7, 8, 6, 7]