Sie die Listen Liste von Tupeln konvertieren müssen, und dann die Kreuzung verwenden. Beachten Sie, dass unter Lösung Elemente in einer anderen Reihenfolge haben können, und Duplikate werden natürlich nicht da sein, da ich Set verwende.
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]]
Alternativ können Sie die Kreuzung in einer Variablen speichern und die endgültige Liste, wenn Auftrag, Duplikate sind notwendig:
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]]
Und die Kreuzung, nur für den Fall, wenn Sie interessiert sind.
In [6]: print intersection
set([(1, 2), (5, 6, 2), (3,), (4,)])
Das wird ziemlich gut für große Listen arbeiten, aber wenn die Listen klein sind, kann die andere Lösung von @timegb erkunden (deren Lösung für längere Listen sehr unoptimal sein)
das Problem, das ich war festgestellt, dass die Unfähigkeit, eine Liste von Listen auf einen Satz Umwandlung, wenn das möglich war diese Kreuzung leicht ergriffen werden könnten, –
Bitte erläutern Sie die Logik, mit der die Ausgabe erhalten wird. – timgeb
Können Sie erklären, warum '[5, 6]' und '[5, 9]' in der Kreuzung sind? – NiziL