2016-07-15 23 views
1

Ich habe zwei folgenden Felder:Finding komplizierte einzigartige Elemente

a = [[1,'string',2,3],[2,'otherstring', 6,1],[1, 'otherstring',2,3]] 
b = [[7,'anotherstring',4,3],[1,'string',2,3]] 

, die in Echt natürlich viel größer sind. ich brauche einzigartige Elemente zu finden:

>>> unique(a,b) 
[[1,"string",2,3],[2,'otherstring', 6,1], 
    [1, 'otherstring',2,3],[7,'anotherstring',4,3]] 

Ich dachte über numpy.unique doch scheint es da ein bisschen eine andere Funktion zu dienen:

>>> a = np.array([[1, 1], [2, 3]]) 
>>> np.unique(a) 
array([1, 2, 3]) 

HINWEIS: Liste (Satz (a + b)) funktioniert nicht, da die Liste nicht hashbar ist.

+1

Gibt es ein Problem mit den Unterlisten in Sätzen/frozensets drehen? –

+0

@WayneWerner Ich denke, das würde nur funktionieren, wenn man sie in Tupel umwandelt, was ein sehr komplizierter Weg zu sein scheint. – UpmostScarab

Antwort

2
set(tuple(item) for item in a+b) 

Ausgang:

set([(2, 'otherstring', 6, 1), (1, 'string', 2, 3), (7, 'anotherstring', 4, 3), (1, 'otherstring', 2, 3)]) 
+0

Dies ist eine Möglichkeit, es zu tun. Aber ich würde map verwenden: ** set (map (tuple, a + b)) ** – UpmostScarab

+1

keine Notwendigkeit für die '[]' im Ausdruck. – Elazar

+0

@Elazar ja. Vielen Dank – galaxyan

0

Das numpy_indexed Paket kann solche Probleme in einer vektorisierten Weise lösen:

import numpy_indexed as npi 
npi.unique(tuple(zip(a+b)))