Si dovrà convertire le liste alla lista di tuple, e quindi utilizzare l'incrocio. Nota che sotto soluzione possono avere elementi in un ordine diverso, e ovviamente i duplicati non saranno lì, dal momento che sto usando set.
In [1]: l1 = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4], [5,9]]
In [2]: l2 = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4], [5,6], [1,2]]
In [3]: [list(x) for x in set(tuple(x) for x in l1).intersection(set(tuple(x) for x in l2))]
Out[3]: [[1, 2], [5, 6, 2], [3], [4]]
È possibile in alternativa, salvare l'incrocio in una variabile e ottiene l'elenco definitivo, se l'ordine, sono necessari i duplicati:
In [4]: intersection = set(tuple(x) for x in l1).intersection(set(tuple(x) for x in l2))
In [5]: [x for x in l1 if tuple(x) in intersection]
Out[5]: [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4]]
e l'intersezione, nel caso in cui, se siete interessati.
In [6]: print intersection
set([(1, 2), (5, 6, 2), (3,), (4,)])
Questo funziona abbastanza bene per grandi liste, ma se le liste sono piccole, non esplorare l'altra soluzione da @timegb (la cui soluzione sarà altamente unoptimal per liste più lunghe)
Il problema che ho trovato era che l'incapacità di convertire una lista di liste ad un insieme, se possibile questo incrocio potrebbe essere presa facilmente –
spiegare la logica con cui si ottiene l'output. – timgeb
Puoi spiegare perché '[5, 6]' e '[5, 9]' sono nell'intersezione? – NiziL