I have two lists, let\'s say:
keys1 = [\'A\', \'B\', \'C\', \'D\', \'E\', \'H\', \'I\']
keys2 = [\'A\', \'B\', \'E\', \'F\', \'G\', \'H\',
By using only lists, you can achieve this with few simple for loops and .copy():
def mergeLists(list1, list2):
# Exit if list2 is empty
if not len(list2):
return list1
# Copy the content of list2 into merged list
merged = list2.copy()
# Create a list for storing temporary elements
elements = []
# Create a variable for storing previous element found in both lists
previous = None
# Loop through the elements of list1
for e in list1:
# Append the element to "elements" list if it's not in list2
if e not in merged:
elements.append(e)
# If it is in list2 (is a common element)
else:
# Loop through the stored elements
for x in elements:
# Insert all the stored elements after the previous common element
merged.insert(previous and merged.index(previous) + 1 or 0, x)
# Save new common element to previous
previous = e
# Empty temporary elements
del elements[:]
# If no more common elements were found but there are elements still stored
if len(elements)
# Insert them after the previous match
for e in elements:
merged.insert(previous and merged.index(previous) + 1 or 0, e)
# Return the merged list
return merged
In [1]: keys1 = ["A", "B", "D", "F", "G", "H"]
In [2]: keys2 = ["A", "C", "D", "E", "F", "H"]
In [3]: mergeLists(keys1, keys2)
Out[3]: ["A", "B", "C", "D", "E", "F", "G", "H"]
English is not my first language, and this one is pretty hard to explain, but if you care about the explanation, here's what it does:
elements which can store temporary elements.previous which stores the previous element that was in both lists.list2 but is in list1, it will append that element to elements list and continue the loop.elements list, appending all elements after previous element to list2.previous and elements is reset to [] and the loop continues.This way it will always follow this format:
So for example:
l1 = ["A", "B", "C", "E"]
l2 = ["A", "D", "E"]
A will be first in the merged list.l1 between the previous common element A and the new common element E will be inserted right after A.l2 between the previous common elmeent A and the new common elmeent E will be inserted right after the elements from l1.E will be last element.Back to step 1 if more common elements found.
["A", "B", "C", "D", "E"]