HOWTO · Python

Esegui la sottrazione dalla lista in Python

Dimostra come eseguire la sottrazione di liste in Python.

In questa pagina

Questo tutorial mostra come eseguire la sottrazione della lista, o in altre parole, lista meno lista in Python.

Come definito dalla teoria degli insiemi in matematica, la differenza di due insiemi si riferisce agli elementi di un insieme che non esistono nell’altro insieme.

Ad esempio, se dichiariamo questi due liste:

list1 = [1, 2, 4]
list2 = [2, 3]

La differenza di list1 - list2 sarebbe [1, 4], mentre list2 - list1 sarebbe [3].

Converti lista in set per eseguire la sottrazione dalla lista in Python

Le operazioni di teoria degli insiemi sono supportate in Python. Tuttavia, solo il tipo di dati set supporta queste operazioni. Pertanto, per utilizzare l’operazione set, le liste devono essere convertite in set. Ciò è possibile avvolgendo una lista attorno alla funzione set().

Nota: la conversione di una lista in un set rimuoverà qualsiasi tipo di ordine e rimuoverà i valori duplicati dall’lista.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)

print("A - B = ", setA - setB)

Produzione:

A - B =  {1, 4, 9, 14}

Il risultato restituisce la differenza tra i due set e rimuove i valori duplicati.

Possiamo usare la funzione list() per convertire il risultato da un set a una lista.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)

list_diff = list(setA - setB)

print("A - B: ", list_diff)

Produzione:

A - B: [1, 4, 9, 14]

Usa la comprensione della lista per ottenere la differenza della lista in Python

La comprensione dell’lista può essere utilizzata per verificare se un elemento esiste solo nel primo lista ma non esiste nel secondo lista. Questa soluzione consente di eseguire l’operazione di differenza senza convertire l’lista in un set.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]

listSub = [elem for elem in listA if elem not in listB]

print("A - B =", listSub)

Produzione:

A - B = [1, 4, 9, 14, 14]

Questa soluzione non altera l’ordine dell’lista e rimuove i duplicati.

Tuttavia, il valore 11 viene ripetuto due volte in listA, ed entrambe le iterazioni di 11 vengono rimosse dal risultato di A - B poiché 11 esiste in entrambi gli insiemi. Questo comportamento è come previsto.