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

У цьому підручнику ви дізнаєтесь, як видалити повторювані елементи зі списків Python.

Коли ви працюєте зі списками в Python, іноді вам може знадобитися працювати лише з унікальними елементами в списку, видаливши дублікати.

Це можна зробити кількома способами. У цьому підручнику ми розглянемо п’ять таких технік.

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

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

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

Отже, як зберегти лише унікальні елементи та видалити повторювані або повторювані елементи?

Ну, ви можете зробити це кількома різними способами. Ви можете або створити новий список, який містить лише унікальні елементи вихідного списку. Або ви можете змінити вихідний список на місці та видалити повторювані елементи.

Ми детально дізнаємось про це в цьому підручнику.

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

Розглянемо реальний приклад. Припустімо, ви на дні народження свого друга.🎊🎉

У представленій колекції солодощів ви бачите, що деякі предмети повторюються. Тепер ви хочете видалити ці дублікати зі списку солодощів.

Давайте створимо список солодощів, який містить усі пункти на зображенні вище.

sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

У наведеному вище списку солодощів елементи «цукерки» та «кекс» повторюються двічі. Давайте використаємо цей приклад списку, щоб видалити повторювані елементи.

Перебирайте списки Python, щоб видалити дублікати

Найпростіший спосіб — створити новий список, який містить кожен елемент рівно один раз.

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

unique_sweets = []
for sweet in sweets:
  if sweet not in unique_sweets:
    unique_sweets.append(sweet)

print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
  • Ми ініціалізуємо порожній список unique_sweets.
  • Переглядаючи список солодощів, ми отримуємо доступ до кожної солодощі.
  • Якщо солодкого ще немає в списку unique_sweets, ми додаємо його в кінець списку unique_sweets за допомогою методу .append().
  Як налаштувати середній клік на сенсорній панелі

Припустімо, ви натрапили на повторюваний елемент, наприклад, друге повторення «цукерок» у списку солодощів. Це не додається до списку unique_sweets, оскільки він уже присутній: солодке не в unique_sweets оцінюється як False для другого входження «кекс» і «цукерка».

Таким чином, у цьому методі кожен елемент трапляється рівно один раз у списку unique_sweets — без жодного повторення.

Використовуйте розуміння списку, щоб видалити дублікати

Ви також можете використовувати розуміння списку, щоб заповнити список unique_sweets.

Хочете оновити основи розуміння списку?

▶️ Перегляньте підручник із розуміння списків у Python.

Скористаємося виразом розуміння списку: [output for item in iterable if condition is True] щоб коротко переписати наведений вище цикл.

unique_sweets = []
[unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets]
print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Незважаючи на те, що ви створюєте новий список, ви не заповнюєте створений список значеннями. Це відбувається тому, що результатом є операція .append() до списку unique_sweets.

Щоб видалити повторювані елементи зі списків Python, ви також можете використовувати вбудовані методи списків, і ми розглянемо це в наступному розділі.

Використовуйте вбудовані методи списку для видалення дублікатів

Ви можете використовувати методи списку Python .count() і .remove(), щоб видалити повторювані елементи.

– Із синтаксисом list.count(value) метод .count() повертає кількість разів, коли значення зустрічається у списку. Отже, кількість повторюваних елементів буде більшою за 1.

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

Використовуючи наведене вище, ми маємо наступний код.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  if sweets.count(sweet) > 1:
  # if True, remove the first occurrence of sweet
    sweets.remove(sweet)

print(sweets)

# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

Оскільки метод .remove() видаляє лише перше входження значення, ви не можете використовувати його для видалення елементів, які зустрічаються більше двох разів.

  • Якщо певний елемент дублюється (зустрічається рівно двічі), цей метод видаляє перше входження.
  • Якщо певний елемент повторюється K разів, то після запуску коду вище К-1 повторень все одно залишиться.
  Як увімкнути панель Chrome Emoji

Але загалом, коли ми говоримо дублікати, ми зазвичай маємо на увазі всі повтори.

Щоб вирішити цей випадок, ви можете змінити наведений вище цикл, щоб видалити всі повторення, крім одного. Замість використання умови if для перевірки підрахунку певного елемента, ви можете запустити цикл while для повторного видалення дублікатів, доки кількість кожного елемента в списку не стане 1.

Список солодощів тепер містить 2 повторення «кекс» і 3 повторення «цукерки».

sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

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

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  while(sweets.count(sweet) > 1):
  # repeatedly remove the first occurrence of sweet until one occurrence remains.
    sweets.remove(sweet)

print(sweets)
# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

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

Наразі ми дізналися наступне:

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

Існують деякі вбудовані структури даних Python, які вимагають, щоб усі значення були унікальними — без повторень. Таким чином, ми можемо привести список Python до однієї з цих структур даних, щоб видалити дублікати. А потім перетворити їх назад у список. Ми дізнаємося, як це зробити в наступних розділах.

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

Набори Python — це набори унікальних елементів. Таким чином, кількість елементів у наборі (задана len() дорівнює кількості присутніх унікальних елементів.

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

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

set(sweets)
# Output
{'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

З результатів у наведеній вище клітинці коду ми бачимо, що кожен елемент з’являється рівно один раз, а дублікати видалено.

  5 нових мов програмування, які вам варто знати

Також зауважте, що порядок елементів не обов’язково збігається з їхнім порядком у вихідному списку солодощів. Це пов’язано з тим, що об’єкт набору Python не тільки є колекцією унікальних елементів, але й є невпорядкованою колекцією.

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

unique_sweets = list(set(sweets))
print(unique_sweets)

# Output
['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

Використовуйте елементи списку як ключі словника для видалення дублікатів

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

Ви можете створити словник Python за допомогою методу .fromkeys() із синтаксисом: dict.fromkeys(ключі, значення). Тут ключі та значення є ітерованими, що містять ключі та значення словника відповідно.

  • keys є обов’язковим параметром, і це може бути будь-який ітератор Python, що відповідає ключам словника.
  • значення є необов’язковим параметром. Якщо ви не вкажете значення, які можна повторити, використовується значення за замовчуванням «Немає».

Не вказуючи значення, dict.fromkeys(sweets) повертає словник Python, де для значень встановлено значення None – значення за замовчуванням. Комірка коду нижче пояснює це.

dict.fromkeys(sweets)

# Output
{'cake': None,
 'candy': None,
 'cheesecake': None,
 'cupcake': None,
 'lollipop': None}

Як і в попередньому розділі, ми можемо знову перетворити словник на список, як показано нижче.

unique_sweets = list(dict.fromkeys(sweets))
print(unique_sweets)
# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

З вихідних даних вище ми бачимо, що дублікати елементів було видалено зі списку солодощів.

Підведення підсумків👩‍🏫

Ось підсумок різних методів, які можна використовувати для видалення повторюваних елементів або повторень зі списків Python.

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

Далі перегляньте проекти Python, щоб потренуватися та навчитися. Або дізнайтеся, як знайти індекс елемента в списках Python. Щасливого навчання!