Если вас не интересует эффективность, это O (n * m)
>>> sorted(set(l1), key=l1.index)
['a', 2, 3, 0, 9.0, 6, 'b']
Использование промежуточного диктанта более сложное, но O (n + m * logm)
где n - количество элементов в l1, а m - количество уникальных элементов в l1
>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
>>> d1=dict((k,v) for v,k in enumerate(reversed(l1)))
>>> sorted(d1, key=d1.get, reverse=True)
['a', 2, 3, 0, 9.0, 6, 'b']
В Python3.1 у вас есть OrderedDict, так что это очень просто
>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
>>> list(OrderedDict.fromkeys(l1))
['a', 2, 3, 0, 9.0, 6, 'b']