Как удалить повторяющиеся элементы в списке python
Перейти к содержимому

Как удалить повторяющиеся элементы в списке python

  • автор:

 

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

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

  • использование временного списка и цикла;
  • использование встроенного метода set();
  • использование ключей словаря;
  • функция List count();
  • понимание списка.

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

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

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

Результат: обновленный список после удаления дубликатов = [1, 2, 3, 4].

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

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

3. Перечисление элементов как ключей словаря

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

4. Когда функция List count() – не рекомендуется

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

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

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

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

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

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

Remove Duplicate Elements from List in Python

In this article, we’ll look at how we can remove duplicate elements from List in Python. There are multiple ways of approaching this problem, and we will show you some of them.

Methods to Remove Duplicate Elements from List – Python

1. Using iteration

To remove duplicate elements from List in Python, we can manually iterate through the list and add an element to the new list if it is not present. Otherwise, we skip that element.

The code is shown below:

Output

The same code can be written using List Comprehension to reduce the number of lines of code, although it is essentially the same as before.

The problem with this approach is that it is a bit slow since a comparison is done for every element in the new list, while already iterating through our original list.

This is computationally expensive, and we have other methods to deal with this issue. You should use this only if the list size is not very large. Otherwise, refer to the other methods.

2. Using set()

A simple and fast approach to remove duplicate elements from list in Python would be to use Python’s built-in set() method to convert the list elements into a unique set, following which we can convert it into a List now removed of all its duplicate elements.

Output

The problem with this approach is that the original List order is not maintained as with the case of the second List since we create the new List from an unordered Set. so if you wish to still preserve the relative ordering, you must avoid this method.

3. Preserving Order: Use OrderedDict

If you want to preserve the order while you remove duplicate elements from List in Python, you can use the OrderedDict class from the collections module.

More specifically, we can use OrderedDict.fromkeys(list) to obtain a dictionary having duplicate elements removed, while still maintaining order. We can then easily convert it into a list using the list() method.

Output

NOTE: If you have Python 3.7 or later, we can use the built in dict.fromkeys(list) instead. This will also guarantee the order.

As you can observe, the order is indeed maintained, so we get the same output as of the first method. But this is much faster! This is the recommended solution to this problem. But for illustration, we will show you a couple of more approaches to remove duplicate elements from List in Python.

4. Using list.count()

The list.count() method returns the number of occurrences of the value. We can use it along with the remove() method to eliminate any duplicate elements. But again, this does not preserve the order.

Note that this method modifies the input list in place, so the changes are reflected there itself.

Output

Everything seems fine, isn’t it?

But, there is a small issue with the above code.

When we are iterating over the list using the for loop and removing the element at the same time, the iterator skips one element. So, the code output depends on the list elements and if you are lucky then you will never get the issue. Let’s understand this scenario with a simple code.

Output:

You can see that the for loop is executed only four times and it’s skipping 3, the next element after the remove() call. If you pass the input list as [1, 1, 1, 1], the final list will be [1, 1].

So, is there any workaround?

Of course, there is a workaround. Use the copy of the list in the for loop but remove the elements from the main list. A simple way to create a copy of the list is through slicing. Here is the update code that will work fine in all the cases.

5 методов удаления повторяющихся элементов из списков Python

В этом руководстве вы узнаете, как удалить повторяющиеся элементы из списков Python.

Когда вы работаете со списками в Python, вам иногда может понадобиться работать только с уникальными элементами в списке — путем удаления дубликатов.

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

Основы списков Python

Давайте начнем наше обсуждение с рассмотрения основ списков Python.

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

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

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

Мы подробно изучим их в этом уроке.

Методы удаления дубликатов из списков Python

Возьмем реальный пример. Предположим, вы на дне рождения своего друга.����

В представленной коллекции сладостей вы видите, что некоторые элементы повторяются. Теперь вы хотите удалить эти повторяющиеся элементы из списка сладостей.

Давайте создадим список сладостей, содержащий все элементы на изображении выше.

В приведенном выше списке сладостей пункты «конфета» и «кекс» повторяются дважды. Давайте воспользуемся этим примером списка, чтобы удалить повторяющиеся элементы.

 

Итерация по спискам Python для удаления дубликатов

Самый простой способ — создать новый список, содержащий каждый элемент ровно один раз.

Прочитайте ячейку кода ниже:

  • Мы инициализируем пустой список unique_sweets.
  • Просматривая список сладостей, мы получаем доступ к каждой сладости.
  • Если сладкого еще нет в списке unique_sweets, мы добавляем его в конец списка unique_sweets с помощью метода .append().

Предположим, вы столкнулись с повторяющимся элементом, например, со вторым вхождением слова «конфеты» в списке сладостей. Это не добавляется в список unique_sweets, так как оно уже присутствует: sweet не в unique_sweets оценивается как False для второго вхождения «кекса» и «конфеты».

Поэтому в этом методе каждый элемент встречается в списке unique_sweets ровно один раз — без повторения.

Используйте понимание списка для удаления дубликатов

Вы также можете использовать понимание списка для заполнения списка unique_sweets.

Хотите освежить основы понимания списков?

▶️ Ознакомьтесь с учебным пособием по распознаванию списков в Python.

Давайте используем выражение понимания списка: [output for item in iterable if condition is True] чтобы кратко переписать приведенный выше цикл.

Даже если вы создаете новый список, вы не заполняете созданный список значениями. Это связано с тем, что результатом является операция .append() в списке unique_sweets.

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

Используйте встроенные методы списка для удаления дубликатов

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

– С синтаксисом list.count(value) метод .count() возвращает количество раз, когда значение встречается в списке. Таким образом, количество повторяющихся элементов будет больше 1.

– list.remove(value) удаляет первое вхождение значения из списка.

Используя вышеизложенное, у нас есть следующий код.

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

  • Если конкретный элемент дублируется (встречается ровно дважды), этот метод удаляет первое вхождение.
  • Если конкретный элемент повторяется K раз, то после запуска вышеуказанного кода все равно останется K-1 повторений.

Но в целом, когда мы говорим о дубликатах, мы обычно имеем в виду все повторения.

Чтобы справиться с этим случаем, вы можете изменить приведенный выше цикл, чтобы удалить все повторения, кроме одного. Вместо того, чтобы использовать условие if для проверки количества определенного элемента, вы можете запустить цикл while для многократного удаления дубликатов, пока количество каждого элемента в списке не станет равным 1.

Список сладостей теперь содержит 2 повторения слова «кекс» и 3 повторения слова «конфеты».

Вы можете использовать цикл while для удаления повторений, как показано ниже. Цикл while продолжает работать до тех пор, пока количество сладкого в сладостях больше 1. Когда остается только одно вхождение, условие sweets.count(sweet) > 1 становится ложным, и цикл переходит к следующему элементу.

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

На данный момент мы узнали следующее:

  • Методы удаления повторяющихся элементов из списков Python путем создания новых списков, содержащих только уникальные элементы.
  • Встроенные методы списка .count() и .remove() для изменения списка на месте.

Некоторые встроенные структуры данных Python требуют, чтобы все значения были уникальными и не повторялись. Поэтому мы можем привести список Python к одной из этих структур данных, чтобы удалить дубликаты. А затем преобразовать их обратно в список. Мы узнаем, как это сделать, в следующих разделах.

Приведение списка Python к набору для удаления дубликатов

Наборы Python — это наборы уникальных элементов. Следовательно, количество элементов, присутствующих в наборе (задается len( ), равно количеству присутствующих уникальных элементов.

Вы можете преобразовать любую итерацию Python в набор, используя синтаксис: set(iterable).

Теперь давайте превратим список сладостей в набор и посмотрим на результат.

Из вывода в приведенной выше ячейке кода мы видим, что каждый элемент появляется ровно один раз, а дубликаты удалены.

Также обратите внимание, что порядок элементов не обязательно совпадает с их порядком в исходном списке сладостей. Это связано с тем, что объект множества Python является не только набором уникальных элементов, но и неупорядоченной коллекцией.

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

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

Словарь Python — это набор пар ключ-значение, где ключи однозначно идентифицируют значения.

Вы можете создать словарь Python, используя метод .fromkeys() с синтаксисом: dict.fromkeys(ключи, значения). Здесь ключи и значения — это итерации, содержащие ключи и значения словаря соответственно.

  • keys — обязательный параметр, и им может быть любая итерация Python, соответствующая ключам словаря.
  • values ​​— необязательный параметр. Если вы не укажете значения iterable, используется значение по умолчанию None.

Без указания значений dict.fromkeys(sweets) возвращает словарь Python, в котором для значений установлено значение None — значение по умолчанию. Ячейка кода ниже объясняет это.

Как и в предыдущем разделе, мы снова можем преобразовать словарь в список, как показано ниже.

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

Подведение итогов��‍��

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

  • Используйте метод списка Python .append(), чтобы добавить неповторяющиеся элементы в новый список. Новый список содержит каждый элемент исходного списка ровно один раз и удаляет все повторения. Вы также можете сделать это, используя понимание списка.
  • Используйте встроенные методы .count() и .remove() для удаления элементов, которые встречаются ровно дважды. То же самое можно поместить в цикл while, чтобы удалить все дополнительные вхождения.
  • Приведите список Python к набору, чтобы сохранить только уникальные элементы.
  • Используйте dict.fromkeys(list) для удаления дубликатов из списка, поскольку в словаре не должно быть повторяющихся ключей.

Затем ознакомьтесь с проектами Python, чтобы практиковаться и учиться. Или узнайте, как найти индекс элемента в списках Python. Приятного обучения!

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

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

Статьи

Введение

В данной статье рассмотрим 5 способов удаления дубликатов из списка в Python.

Удаление дубликатов из списка с помощью генератора

Для начала создадим список:

Далее мы создадим пустой список, в котором не будет дубликатов:

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

Дословное условие: Если элемента итерации нет в new_list, то он добавляется в new_list.

Удаление дубликатов из списка с помощью генератора списка, и метода enumerate()

Вместо условия в генераторе можно использовать метод enumerate(), который найдёт существующие элементы, и пропустит их при добавлении в новый список:

Удаление дубликатов из списка с помощью цикла for

Генератор это по сути цикл внутри списка, но мы можем вместо генератора пойти по более длинному пути, и использовать цикл вне списка:

Удаление дубликатов из списка с помощью функции set()

Способ заключается в том, что с помощью метода set() мы преобразуем список в множество, получим уникальные значения, и сделаем из множества список.

Удаление дубликатов из списка с помощью метода fromkeys

В модуле collections есть класс OrderedDict, в котором есть метод fromkeys. Именно этот метод нам и понадобится! Для начала он удалит дубликаты, после чего вернёт словарь, который впоследствии мы преобразуем в список:

Заключение

В статье мы с Вами разобрали целых пять способов удаления дубликатов в списке в Python! Надеюсь Вам понравилась статья, желаю удачи и успехов! ��

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *