2016-01-13 9 views
5

In Python, uno potrebbe ottenere gli elementi che sono esclusivi per lst1 utilizzando:Qual è l'equivalente Matlab di `not in` di Python?

lst1=['a','b','c'] 
lst2=['c','d','e'] 
lst3=[] 
for i in lst1: 
    if i not in lst2: 
     lst3.append(i) 

Quale sarebbe l'equivalente Matlab?

+1

anche: 'set (LST1) - set (LST2)' – gauteh

+0

@gauteh Finché non si preoccupano di numero di ripetizioni di ogni elemento. per esempio 'set()' non funzionerebbe correttamente se 'lst1 = ['a', 'a', 'b', 'c']'. – dwanderson

risposta

13

Siete alla ricerca di MATLAB setdiff -

setdiff(lst1,lst2) 

corsa del campione -

>> lst1={'a','b','c'}; 
>> lst2={'c','d','e'}; 
>> setdiff(lst1,lst2) 
ans = 
    'a' 'b' 

Verificare con run Python -

In [161]: lst1=['a','b','c'] 
    ...: lst2=['c','d','e'] 
    ...: lst3=[] 
    ...: for i in lst1: 
    ...:  if i not in lst2: 
    ...:   lst3.append(i) 
    ...:   

In [162]: lst3 
Out[162]: ['a', 'b'] 

In realtà, si hanno setdiff in Python di NumPy module come bene, come numpy.setdiff1d. L'implementazione equivalente sarebbe -

In [166]: import numpy as np 

In [167]: np.setdiff1d(lst1,lst2) # Output as an array 
Out[167]: 
array(['a', 'b'], 
     dtype='|S1') 

In [168]: np.setdiff1d(lst1,lst2).tolist() # Output as list 
Out[168]: ['a', 'b'] 
+0

Perfetto, grazie – CiaranWelsh

+0

Il 'setdiff' di MATLAB oeratesi come se gli input fossero set algebrici veri, cioè nessun elemento viene ripetuto. (se è ripetuto, questo viene ignorato quando si calcolano le differenze) Ho finito per scrivere una funzione 'R'" vecdiff "per gestire le differenze nelle raccolte di elementi in cui alcuni valori sono ripetuti; questo può essere necessario in MATLAB, a seconda delle reali esigenze dell'OP. –

+0

@CarlWitthoft Sì, MATLAB manterrà solo elementi unici nell'output. Per conservare i duplicati, si può usare ['ismember'] (http://www.mathworks.com/help/matlab/ref/ismember.html) -' lst1 (~ ismember (lst1, lst2)) '. Quindi, 'R' in modo nativo non ha qualcosa di simile a' setdiff'? – Divakar