Одной из альтернатив является использование кучи для поддержки элементов top-n :
import heapq
from operator import itemgetter
def top(lst, n=4):
heap = [(0, i, '') for i in range(n)]
heapq.heapify(heap)
for i, word in enumerate(lst):
item = (len(word), i, word)
if item > heap[0]:
heapq.heapreplace(heap, item)
return list(map(itemgetter(2), heap))
words = ['Mother', 'Dad', 'Cat', 'Bicycle', 'House', 'Hat']
print(top(words))
выход
['Hat', 'House', 'Bicycle', 'Mother']
В куче мы храним элементы, соответствующие длине и положению, поэтому в случае связей выбирается последний из появившихся.