2016-09-18 2 views
1

J'ai les deux ces listes et j'ai besoin de soustraire l'un de l'autre mais le "-" régulier ne fonctionnera pas, ni .intersection ou XOR (^).Soustrayez deux listes de tuples les uns des autres

A = [(0, 1)] 
B = [(0, 0), (0,1), (0, 2)] 

Essentiellement ce que je veux est:

B - A = [(0, 0), (0, 2)] 

Répondre

2

Vous pouvez utiliser la compréhension de la liste pour résoudre ce problème:

[item for item in B if item not in A] 

Plus discussion se trouve here

2

S'il y a pas de doublons en B et A, pourrait b e préférable de les garder comme des ensembles, et utiliser le difference des ensembles:

A = [(0, 1)] 
B = [(0, 0), (0,1), (0, 2)] 
diff = set(B) - set(A) # or set(B).difference(A) 
print(diff) 
# {(0, 0), (0, 2)} 

Vous pouvez effectuer d'autres opérations comme trouver le intersection entre les deux ensembles:

>>> set(B) & set(A) 
{(0, 1)} 

ou même prendre leur symmetric_difference:

>>> set(B)^set(A) 
{(0, 0), (0, 2)} 
+0

Lorsque vous utilisez des méthodes telles que '.difference 'vous n'avez pas explicitement besoin de convertir' A' en un ensemble car il faudra tout itérable. –

+0

@JonClements Ah oui, bon oeil là-dessus. Merci –

0

Vous pouvez effectuer de telles opérations en convertissant les listes en ensembles. Régler la différence:

r = set(B)-set(A) 

liste Convertir si nécessaire: liste (r)

Travailler sur des ensembles est efficace par rapport à l'exécution « dans » les opérations sur les listes: using lists vs sets for list differences