Se i tuoi elenchi non possono contenere duplicati e non ti interessa l'ordine, dovresti usare set anziché elenchi (a proposito, sono chiamati elenchi, non array). Allora ciò che si vuole è sia veloce e banale da implementare:
>>> set1 = set(["abc", "def", "ghi", "jkl"])
>>> set2 = set(["abc", "ghi", "456", "789"])
>>> set2 - set1
set(['456', '789'])
Se lista2 possono contenere i duplicati o le questioni di ordine allora si può ancora fare lista1 un set per accelerare le ricerche:
>>> list1 = ["abc", "def", "ghi", "jkl"]
>>> list2 = ["abc", "ghi", "456", "789"]
>>> set1 = set(list1)
>>> [a for a in list2 if a not in set1]
['456', '789']
Nota questo richiede che gli oggetti siano lavabili ma che scorrono vicino al tempo O (n).
Se gli articoli non sono lavabili ma sono ordinabili, è possibile ordinare la lista1 e utilizzare una ricerca binaria per trovare gli elementi in essa contenuti. Questo dà il tempo O (n log (n)).
Se i tuoi articoli non sono né lavabili e non ordinabili, dovrai ricorrere alla ricerca lineare semplice O (n * n) per ciascun elemento.
fonte
2010-04-24 22:52:05
Se non ti preoccupi dei duplicati o dell'ordine, dovresti prendere in considerazione 'set (array2) - set (array2)'. – Jules