Вы можете создать dict, в котором будет храниться индекс первого вхождения каждого значения, и использовать dict для выполнения сортировки:
lst = ["AM43", "AM22", "AM51", "AM43", "AM22", "AM51", "AM43", "AM22", "AM51"]
ix = {k: i for i, k in reversed(list(enumerate(lst)))}
res = sorted(lst, key=ix.get)
# ['AM51', 'AM51', 'AM51', 'AM22', 'AM22', 'AM22', 'AM43', 'AM43', 'AM43']
Edit: @ emsimposon92 обеспечивает двухпроходное линейное времяРешение реализуемо следующим образом:
from collections import Counter
ctr = Counter(lst)
visited = set()
res2 = list()
for x in lst:
if x in visited:
continue
res2.extend([x] * ctr[x])
visited.add(x)