Я хотел бы вернуться и вернуть значение без дубликатов по порядку

Это мой код:

value = input("Что бы вы хотели вернуть без повторяющихся значений?\n")

set_value = set(value)
list_value = list(set_value)
sorted_value = sorted(list_value)
print(value)

Моя ошибка в том, что я не могу вернуть дубликаты после преобразования в список.

Чтобы вы знали, почему код плохой, я буквально начал на прошлой неделе и поэтому не знаю, как применять многие методы.

Было бы полезно, если бы кто-нибудь написал ответ полностью.

Пример: 1, 1, 1, 5, 5, f, k, f

(PS. Это в python3 на Repl.it).


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

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

Если я правильно понял, то вам нужно и преобразовать список в сет и знать, что убрали из сета. Это можно сделать хитрым образом. Будем хранить 2 листа sets и rep, в rep будут храниться повторяющиеся элементы. Отсортируем изначальный список, тогда все повторяющиеся элементы будут храниться рядом, при первой встречи мы добавляем его в sets, во все другие разы - в rep, так это будет выглядеть ::

value =  [1,1,2,3,2,4,3,5]
sort_value = sorted(value)
sets = []
rep = []
for i in range(0,len(sort_value)):
    if len(sets)==0:
        sets.append(sort_value[i])
    else:
        if sets[-1]==sort_value[i]:
            rep.append(sort_value[i])
        else:
            sets.append(sort_value[i])
print(sets)
print(rep)

Если что, это будет работать потому что, пока мы не добавим новый элемент, мы будем встречать повторяющиеся, если они есть, а иначе мы добавим новый

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

https://ideone.com/Ab4HQL

a = [1, 3, 7, 1, 6, 8, 2, 4, 7, 3, 5, 6, 2]
s = set()
print([s.add(x) or x for x in a if x not in s])
[1, 3, 7, 6, 8, 2, 4, 5]
→ Ссылка
Автор решения: icYFTL
value = [1, 1, 1, 2, 3, 2, 4, 3, 5]
duplicates = [x for x in sorted(list(set(value))) for _ in range(value.count(x) - 1 if value.count(x) > 0 else 0)]
print(duplicates)
→ Ссылка
Автор решения: Andy Pavlov

Достаточно быстро можно решить задачу, посчитав количество уникальных элементов. К примеру, загоняем все в словарь с ключем в виде элемента списка, а значение принимаем, к примеру, -1.

Проходим по исходному списку циклов и на каждый элемент плюсуем в словарь единицу. Изначально значение ключа -1, обнаружили элемент - +1, стало 0, потом снова обнаружили еще +1) Тогда уникальные значения будут у нас с условным значением 0 или False, неуникальные с числом больше нуля или True. После этого делаем различную сортировку по значениям словаря.

Если нужны дубликаты, то фильтруем и сортируем все, где значение ключа не равно нулю. Если нужны только уникальные значения, то аналогично берем все со значениями ключей ноль. В конце фильтруем.

Из плюсов работает достаточно быстро.

value = [1, 1, 1, 2, 3, 2, 5, 3, 4]

d = dict().fromkeys(value, -1)
for r in value:
    d[r] += 1

unique = set(value)  # сет из уникальных значений
without_dubs = sorted(filter(lambda x: not d[x], d))  # Значения, у которых нет дубликатов
with_dubs = sorted(filter(lambda x: d[x], d))  # значения, у которых есть дубликаты
→ Ссылка