Язык программирования Python

Как удалить повторы из списка Python

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

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

Общий алгоритм

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

Для каждого элемента исходного списка мы проверим, существует ли этот элемент в списке без повторов. Если он уже существует, мы ничего не делаем и продолжаем, но если его нет, мы добавляем его в этот список.

В конце мы возвращаем массив без повторов.

Удаление дублей из массива с помощью Python

Рассмотрим первый пример для простейших типов данных (не объектов). В таком случае функция выглядит следующим образом:

def delete_duplicates(list): new_list = [] for element in list: if not element in new_list: new_list.append(element) return new_list
Code language: PHP (php)

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

Вот как это работает:

list = [1, 1, 1, 3, 3, 3, 4, 4, 4, 90, 2, 10, 60, 2, 60] no_duplicates = delete_duplicates(list) print("Исходный: ") print(list) print("Без повторов:") print(no_duplicates)
Code language: PHP (php)

В случае с объектами

Небольшое примечание. Как вы можете видеть, мы используем оператор  in  языка Python, чтобы узнать, находится ли элемент уже внутри списка. Этот оператор также работает с объектами, но мы должны переопределить  __eq__ .

Пример удаления повторяющихся объектов массива

Функция точно такая же, но теперь мы работаем с объектами. Для этого конкретного случая я создал пример класса и заполнил массив его экземплярами:

class Game: def __init__(self, name, price): self.name = name self.price = price # Метод, который сообщает нам, равен ли один объект другому объекту def __eq__(self, other_game): return other_game.name == self.name and other_game.price == self.price def __str__(self): return f"{self.name}, {self.price}" def delete_duplicates(list): new_list = [] for element in list: if not element in new_list: new_list.append(element) return new_list # Обратите внимание, что Cuphead появляется дважды (с той же ценой и названием) и Hollow Knight тоже. list = [Game("Cuphead", 180), Game("Cuphead", 180), Game( "Resident Evil 2", 430), Game("Hollow Knight", 150), Game("Cuphead", 180), Game("Hollow Knight", 150)] no_duplicates = delete_duplicates(list) print("===\nИсходный: ===\n") for element in list: print(str(element)) print("===\nБез дублей:===\n") for element in no_duplicates: print(str(element))

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

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