Вы можете попробовать
In [3]: [value for _, value in frozenset((type(x), x) for x in l)]
Out[3]: [1.0, '1', 1, 'dsa', 'asd']
Мы создаем (временный) frozenset
кортежей, содержащих как элемент и его тип - сохранить элементы, которые равны (например, , 1,0 и Правда), но имеют разные типы. Затем мы перебираем его, распаковываем кортежи и извлекаем элементы (value
).
Несомненно, мы могли бы использовать обычный set
, который является изменяемым, но нам не нужна изменчивость, потому что наш набор является временным.
Обратите внимание, что это не обязательно сохранит первоначальный заказ.
Если вам нужен оригинальный заказ сохранившийся, используйте collections.OrderedDict
, который является хэш-карта (так же как обычный dict
) и, следовательно, работает аналогично frozenset
/set
In [16]: from collections import OrderedDict
In [17]: [value for _, value in OrderedDict.fromkeys((type(x), x) for x in l)]
Out[17]: ['asd', 'dsa', 1, '1', 1.0]
Это на самом деле не является дубликатом предыдущий вопрос, который был конкретно посвящен наборам, тогда как здесь OP хочет сделать список уникальным (для конкретного определения уникального) без очевидных ограничений на реализацию. Также обратите внимание, что ответ на предыдущий вопрос не помогает OP вообще. – user4815162342