Удалить дубликаты из списка на месте - PullRequest
0 голосов
/ 08 февраля 2019

Как сделать список, содержащий только уникальные элементы, при сохранении порядка и обновлении его на месте?

Я знаю, что набор можно использовать, но это не гарантирует заказ.

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Расширенное решение CodeSpeed.

lst = [1, 2, 2, 1, 1]

seen = set()

length = len(lst) - 1

i = 0
while i < length:
    if lst[i] in seen:
        del lst[i]
        i -= 1
    seen.add(lst[i])
    i += 1
    length = len(lst)

print(lst)
0 голосов
/ 08 февраля 2019

Вы можете использовать loop, чтобы перебирать записи в списке одну за другой и вставлять их в новый list, только если их нет в новом list.

lst = [3,3,3,1,2,2,4]

my_list = []

for i in lst:
    if i not in my_list:
        my_list.append(i)
my_list

# Output - [3, 1, 2, 4]

Надеюсь, это поможет.

0 голосов
/ 08 февраля 2019

Используйте вспомогательный набор и цикл while:

def unique(arr):
    tmp_set = set()
    i = 0
    while i < len(arr):
        if arr[i] in tmp_set:
            del arr[i]
        else:
            tmp_set.add(arr[i])
            i += 1

Выше приведено обновление массива на месте и сохранение порядка элементов.

...