Убрать дубликаты из списка, проблема смешения типов данных

Решаю задачи на "Ok, Python!" И застрял на следующем задании: Дан список [1.0, 'ok', True, 'ok', 7, 1]. Удалите из него повторяющиеся элементы (в списке не должно остаться дублей). Выведите измененный список на экран. Будьте внимательны! Значения 1.0, True и 1 – это не дубли!

Всё никак не понимаю как его выполнить. У меня выходит либо [1.0, ok, 7], либо просто набор из данных


Я использовал несколько методов: Первый:

my_list = [1.0, 'ok', True, 'ok', 7, 1]
dublicate = list(dict.fromkeys(my_list))

Второй:

my_list = [1.0, 'ok', True, 'ok', 7, 1]
dublicate = set(my_list)
pustoi = []
for num in dublicate:
    for sec in my_list:
        if sec == num and type(sec) == type(num):
            break
        else:
            pustoi.append(sec)

Третий:

my_list = [1.0, 'ok', True, 'ok', 7, 1]
dublicate = set(my_list)

Ответы (2 шт):

Автор решения: MarianD

Например так:

my_list = [1.0, 'ok', True, 'ok', 7, 1]

used = []
no_duplicates = []

for elem in my_list:
    if (elem, type(elem)) not in used:
        used.append((elem, type(elem)))
        no_duplicates.append(elem)
        
print(no_duplicates)

Вывод:

[1.0, 'ok', True, 7, 1]

Обяснение:

В переменной used («использованные») будем сохранять пары (элемент, тип_элемента), когда мы с элементом и его типом встретимся в списке my_list впервые.

В том случае (и в никаком другом) такой элемент записываем в список no_duplicates («без дубликатов»).

→ Ссылка
Автор решения: Stanislav Volodarskiy

Из списка сделайте множество пар значение/тип, поместите его в множество, извлеките пары из множества, сохраните значения в новый список:

source = [1.0, 'ok', True, 'ok', 7, 1]
unique = [v for v, _ in set((v, type(v)) for v in source)]
print(unique)

Если код выше вам трудно читать, вот похожая идея в виде цикла. pairs - множество пар значение/тип, которые уже встречались раньше. Пара попадает в результат, только если это новая пара. Порядок значений исходного списка сохраняется:

source = [1.0, 'ok', True, 'ok', 7, 1]

pairs = set()  # (v, type(v))
unique = []
for v in source:
    pair = v, type(v)
    if pair not in pairs:
        pairs.add(pair)
        unique.append(v)

print(unique)
→ Ссылка