Si sus listas no pueden contener duplicados y no le importa el orden, entonces debe utilizar conjuntos en lugar de listas (por cierto, se les llama listas, no matrices). A continuación, lo que quiere es a la vez rápido y trivial de implementar:
>>> set1 = set(["abc", "def", "ghi", "jkl"])
>>> set2 = set(["abc", "ghi", "456", "789"])
>>> set2 - set1
set(['456', '789'])
Si lista2 puede contener duplicados o las cuestiones de orden entonces usted todavía puede hacer lista1 un conjunto para acelerar las operaciones de búsqueda:
>>> 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 que esto requiere que los elementos sean manejables, pero que se ejecuten cerca del tiempo O (n).
Si los artículos no se pueden cargar pero se pueden ordenar, se puede ordenar la lista1 y usar una búsqueda binaria para encontrar los artículos en ella. Esto le da a O (n log (n)) tiempo.
Si sus artículos no son lavables ni pueden pedirse, tendrá que recurrir a la búsqueda lineal simple O (n * n) lenta para cada elemento.
Si no le importan los duplicados o el pedido, debería considerar hacer 'set (array2) - set (array2)'. – Jules