Поиск по сайту:

Python Удалить дубликаты из списка


Есть много способов удалить дубликаты из списка Python.

  • Использование временного списка и зацикливание
  • Использование встроенного метода set()
  • Использование ключей словаря
  • Функция подсчета списка()
  • Понимание списка

Удаление дубликатов из списка

Список Python может содержать повторяющиеся элементы. Давайте рассмотрим примеры удаления повторяющихся элементов разными способами.

1. Использование временного списка

Это метод грубой силы для удаления повторяющихся элементов из списка. Мы создадим временный список и добавим в него элементы, только если его нет.

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

temp = []

for x in ints_list:
    if x not in temp:
        temp.append(x)

ints_list = temp

print(f'Updated List after removing duplicates = {temp}')

Вывод: Обновленный список после удаления дубликатов=[1, 2, 3, 4] Рекомендуемая литература: f-строки Python

2. функция set()

В наборе Python нет повторяющихся элементов. Мы можем использовать встроенную функцию set(), чтобы преобразовать список в набор, а затем использовать функцию list(), чтобы преобразовать его обратно в список.

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

ints_list1 = list(set(ints_list))
print(ints_list1)  # [1, 2, 3, 4]

3. Элементы списка в виде ключей словаря

Мы знаем, что ключи словаря уникальны. Класс dict имеет функцию fromkeys(), которая принимает итерируемый объект для создания словаря с ключами из итерируемого объекта.

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

ints_list2 = list(dict.fromkeys(ints_list))
print(ints_list2)  # [1, 2, 3, 4]

4. Функция list count() — не рекомендуется

Метод list count() возвращает количество вхождений значения. Мы можем использовать его с методом remove() для удаления повторяющихся элементов из списка.

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

for x in ints_list:
    if ints_list.count(x) > 1:
        ints_list.remove(x)
print(ints_list)  # [1, 2, 3, 4]

ПРИМЕЧАНИЕ. Как указано в комментарии ниже, использование функции count() не рекомендуется при удалении элемента из того же итератора, поскольку это может привести к нежелательным результатам. Например:

values = [87, 94, 45, 94, 94, 41, 65, 94, 41, 99, 94, 94, 94]

for x in values:
    if values.count(x) > 1:
        values.remove(x)
print(values)  # [87, 45, 65, 41, 99, 94, 94] - 94 is still present twice

5. Понимание списка

Мы можем создать список из итерируемого объекта, используя понимание списка. Этот метод аналогичен использованию временного списка и цикла for для удаления повторяющихся элементов. Но это уменьшает количество строк кода.

int_list = [1, 2, 3, 4, 3, 2]
temp = []
[temp.append(x) for x in ints_list if x not in temp]
print(temp)  # [1, 2, 3, 4]

Лучший способ удалить дубликаты из списка

Если вы не хотите дублировать элементы, вам следует использовать Set. Но если вам нужно удалить повторяющиеся значения из списка, я бы предпочел функцию count(), потому что она не создает еще один временный набор или объект списка. Таким образом, это более эффективно для памяти.