# Поиск дубликатов в списке Python

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

В конце этого руководства вы научитесь:

* Найти дубликаты в списке и подсчитать их
* Удалить дубликаты в списках Python
* Найти дубликаты в списке словарей и списках

Оглавление

* [Как найти дубликаты в списке в Python](#kak-naiti-dublikaty-v-spiske-v-python)
* [Как найти дубликаты в списке и посчитать их в Python](#kak-naiti-dublikaty-v-spiske-i-poschitat-ikh-v-python)
* [Как удалить дубликаты из списка в Python](#kak-udalit-dublikaty-iz-spiska-v-python)
* [Как удалить дубликаты в списке словарей в Python](#kak-udalit-dublikaty-v-spiske-slovarei-v-python)
* [Как удалить дубликаты в списке списков в Python](#kak-udalit-dublikaty-v-spiske-spiskov-v-python)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

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

### Как найти дубликаты в списке в Python

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

```python
# Поиск дублирующихся элементов в списке Python
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]

# Создаем список дубликатов
duplicates = [number for number in numbers if numbers.count(number) > 1]
# Преобразуем список в множество, чтобы получить уникальные дубликаты, затем преобразуем обратно в список
unique_duplicates = list(set(duplicates))

print(unique_duplicates)

# Возвращает: [2, 3, 5]
```

Давайте разберем, что мы здесь сделали:

1. Мы использовали списковое включение, чтобы включить любой элемент, который встречался в списке больше одного раза.
2. Затем мы преобразовали это в множество, чтобы удалить все дубликаты из отфильтрованного списка
3. Наконец, мы преобразовали множество обратно в список

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

### Как найти дубликаты в списке и посчитать их в Python

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

Для выполнения этой задачи мы воспользуемся классом `Counter` из модуля collections. Затем [отфильтруем получившийся словарь с помощью генератора словарей](https://datagy.io/python-dictionary-comprehensions/). Давайте посмотрим на код и затем разберем шаги построчно:

```python
# Поиск дублирующихся элементов в списке Python и их подсчет
from collections import Counter

numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]

# Создаем словарь с подсчетом встречаемости каждого элемента
counts = dict(Counter(numbers))
# Создаем словарь с дублирующимися элементами и их количеством
duplicates = {key:value for key, value in counts.items() if value > 1}
print(duplicates)

# Возвращает: {2: 2, 3: 4, 5: 3}
```

Давайте разберем этот код, так как он немного сложнее:

1. Мы импортируем класс `Counter` из библиотеки collections
2. Мы загружаем наш список `numbers`
3. Затем мы создаем объект Counter из нашего списка и преобразуем его в словарь
4. Затем мы фильтруем наш словарь, чтобы удалить любые пары ключ:значение, где ключ встречается только один раз.

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

### Как удалить дубликаты из списка в Python

Удаление дубликатов в списке Python легко выполняется с помощью функции `set()`. Так как множества в Python не могут содержать дубликаты, при преобразовании списка в множество удаляются все дубликаты. Затем можно снова преобразовать множество в список, используя функцию `list()`

Давайте посмотрим, как мы можем сделать это на Python:

```python
# Удаление дубликатов из списка в Python
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]
# Преобразуем список в множество, чтобы убрать дубликаты, затем обратно в список
unique = list(set(numbers))
print(unique)

# Возвращает: [1, 2, 3, 4, 5, 6, 7]
```

Чтобы узнать о других способах удаления дубликатов из списка в Python, [ознакомьтесь с этим руководством](https://datagy.io/python-remove-duplicates-from-list/), где рассматривается множество различных методов! В следующем разделе вы узнаете, как находить дубликаты в списке словарей.

### Как удалить дубликаты в списке словарей в Python

Давайте рассмотрим, как мы можем удалить дубликаты из списка словарей в Python. Часто вы будете сталкиваться с данными из Интернета в форматах, которые напоминают списки словарей. Умение удалять дубликаты из этих списков — важный навык для упрощения ваших данных.

Давайте посмотрим, как мы можем сделать это в Python, используя цикл for:

```python
# Удаление дубликатов из списка словарей
items = [{'name':'Nik'}, {'name': 'Kate'}, {'name':'James'}, {'name':'Nik'}, {'name': 'Kate'}]
unique_items = []

# Проходим по каждому элементу в списке
for item in items:
    # Если элемент не в списке уникальных элементов, добавляем его
    if item not in unique_items:
        unique_items.append(item)

print(unique_items)

# Возвращает: [{'name': 'Nik'}, {'name': 'Kate'}, {'name': 'James'}]
```

Этот метод будет включать только _полные_ дубликаты. Это означает, что если в словаре есть, скажем, дополнительная пара ключ-значение, он будет включён.

### Как удалить дубликаты в списке списков в Python

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

Давайте посмотрим, как это выглядит:

```python
# Удаление дубликатов из списка списков в Python
list_of_lists = [[1,2,3], [1,2], [2,3], [1,2,3], [2,3], [1,2,3,4]]
unique = []

# Проходим по каждому подсписку в списке
for sublist in list_of_lists:
    # Если подсписок не в списке уникальных подсписков, добавляем его
    if sublist not in unique:
        unique.append(sublist)

print(unique)

# Возвращает: [[1, 2, 3], [1, 2], [2, 3], [1, 2, 3, 4]]
```

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

### Заключение

В этом руководстве вы узнали, как работать с дублирующимися элементами в списках Python. Сначала вы узнали, как идентифицировать повторяющиеся элементы и подсчитывать, как часто они встречаются. Затем вы узнали, как удалить дублирующиеся элементы из списка с помощью функции `set()`. Далее вы узнали, как удалить дублирующиеся элементы из списка словарей и списка списков в Python.

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

Чтобы узнать больше о классе `Counter` из библиотеки collections, [ознакомьтесь с официальной документацией здесь](https://docs.python.org/3/library/collections.html#collections.Counter)

### Дополнительные ресурсы

Чтобы узнать о связанных темах, ознакомьтесь с учебными пособиями ниже:

* Python: объединить списки – объединить списки (8 способов)
* Python: подсчитать количество вхождений в списке (6 способов)
* Разница в списках Python: найдите разницу между двумя списками Python
