Trova duplicati in una lista in Python

Rayven Esplanada 30 marzo 2021
  1. Usa la funzione set() per trovare duplicati in una lista Python
  2. Usa il modulo iteration_utils per trovare duplicati in una lista Python
Trova duplicati in una lista in Python

Questo tutorial mostra come cercare i duplicati all’interno di una lista in Python.

Usa la funzione set() per trovare duplicati in una lista Python

Python set() è una funzione per convertire una lista in un insieme. In base alla descrizione di un set e di una lista, convertire una lista in un set significherebbe rimuovere tutti i duplicati nell’lista.

Tuttavia, ciò che vogliamo è cercare le voci nell’lista che sono duplicate. Per farlo, usiamo ancora la funzione set(), ma includiamo solo quelli con più di una voce nell’lista, il che significa che sono voci che hanno duplicati.

Dichiarare una funzione che cerca i duplicati all’interno di una lista e memorizzarli come un insieme.

def listToSet(listNums):
    set([num for num in listNums if listNums.count(x) > 1])

Un altro approccio, se vuoi mantenere il risultato come una lista invece che come un insieme, è usare set() e add() per trovare i duplicati all’interno della lista e riconvertirli in una lista durante la restituzione.

def list_duplicates(listNums):
    once = set()
    seenOnce = once.add
    twice = set(num for num in listNums if num in once or seenOnce(x))
    return list(twice)

Questa funzione aggiunge la voce a once se il numero appare per la prima volta e non esiste all’interno dell’insieme once.

Entrambe le funzioni restituiranno lo stesso output, sebbene una sia un insieme e l’altra sia una lista. Il risultato produrrà tutte le voci duplicate in listNums.

[1, 3, 5, 8]

Usa il modulo iteration_utils per trovare duplicati in una lista Python

iteration_utils ha due funzioni che possono cercare duplicati all’interno di una funzione predefinita: duplicates e unique_everseen.

Useremo la stessa definizione di lista listNums sopra.

Importa duplicates da iteration_utils e usalo per restituire una lista di tutti i duplicati all’interno di listNums.

from iteration_utils import duplicates

listNums = [1, 1, 2, 3, 3, 4, 5, 5, 5, 5, 6, 8, 8]


def listDups(listNums):
    return list(duplicates(listNums))

L’output della funzione precedente restituirà una lista di tutte le voci duplicate all’interno di listNums.

[1, 1, 3, 3, 5, 5, 5, 5, 8, 8]

Tuttavia, l’lista include anche le iterazioni delle voci duplicate. Ciò significa che restituirà ogni istanza della voce duplicata.

  • È qui che entra in gioco unique_everseen. Questa funzione elabora l’lista per rimuovere tutte le istanze duplicate restituite da duplicates().
from iteration_utils import duplicates
from iteration_utils import unique_everseen

listNums = [1, 1, 2, 3, 3, 4, 5, 5, 5, 5, 6, 8, 8]


def listDupsUnique(listNums):
    return list(unique_everseen(duplicates(listNums)))

Questa funzione restituirà quindi:

[1, 3, 5, 8]

In sintesi, ci sono 2 semplici soluzioni per cercare duplicati all’interno di una lista in Python. Il primo è usare set() e altre funzioni di utilità degli insiemi in Python per cercare duplicati e memorizzarli in un’altra variabile. Un altro è del modulo iteration_utils usando duplicates e unique_everseen, che più o meno fa la stessa cosa e produce lo stesso output.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Articolo correlato - Python List