Удалить совпадающие элементы списка
Само задание:
В заданном неупорядоченном списке оставить по одному в каждой группе совпадающих элементов, сохранив порядок следования остальных
Вот я пробовал это сделать, но это не совсем то, т.к после преобразования из списка в множество информация о порядке элементов удаляется, а мне же надо что бы порядок остался таким же по условию задания
def spisok():
spisok1 = [3, 5, 6, 7, 3]
y = set(spisok1)
for i in y:
print(i,end = ' ')
spisok()
Ответы (2 шт):
а вы проверьте на таком spisok1 = [7, 3, 5, 6, 7, 3]
и совсем другой результат
можно сделать так:
spisok1 = [7, 3, 5, 6, 7, 3]
trash = set()
arr = []
for i in spisok1:
if i not in trash:
arr.append(i)
trash.add(i)
print(arr)
подольше работать будет этот код (из-за более долгого поиска):
arr = []
for i in spisok1:
if i not in arr:
arr.append(i)
можно сделать в 1 строчку, но код будет дикий:
arr = [spisok1[0]] + [spisok1[pos] for pos in range(1, len(spisok1)) if spisok1[pos:].count(spisok1[pos]) == spisok1.count(spisok1[pos])]
Для питона 3.7 (для CPython это версия 3.6) и выше можно работать через ключи словаря, т.к. порядок добавления ключей в словари сохраняется.
Пример:
spisok1 = [3, 5, 6, 7, 3]
spisok1 = list(dict.fromkeys(spisok1))
print(spisok1)