2011-08-04 5 views
1

J'ai 2 très grands tableaux.Comment diff 2 un très gros tableaux?

Ce code va-t-il être très lent à fonctionner?

 

results1 = [1,2,3..] 
results2 = [1,2,3,4 ... ] 


for result1 in results1: 
    if result1 not in results2: 
     print result1 

+0

un exemple de comment très grand? – tomasz

Répondre

7

Utilisez un set:

hashed = set(results2) 

.... 

    if result1 not in hashed: 

Notez que cela nécessite beaucoup de mémoire si votre tableau est vraiment énorme.

Vous pouvez également trier les deux tableaux et utiliser deux index. Si les deux éléments sont identiques, incrémentez les deux index. Si elles sont inégales, incrémentez l'index du tableau qui contient l'élément le plus petit.

1

Essayez celui

l1 = [4,2,4,5,2,1,3,3,34,54,3445,4]

L2 = [5,7,4,5,8,5,2,4,56]

diff_l = list (ensemble (l1) -set (l2))

pour plusieurs opérations Reference

Mais ne peut pas aider tout ou effectuer bon pour d'énormes données

0

Je ne suis pas vraiment si vous voulez la différence ordinaire (éléments dans a, mais pas dans b) ou symétrique différence (éléments qui ne sont pas présents dans les deux), mais heureusement, les deux peuvent être fait en utilisant seulement regular set operations après la conversion des listes à set. Mais d'abord, une liste de conversion d'avertissement à définir supprime les éléments en double de la liste, car l'ensemble ne peut pas contenir de doublons.

permet donc de déclarer nos données .:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> b = [12, 11, 10, 9, 8, 7, 6] 

Pour obtenir la différence simple, à savoir les éléments qui sont présents dans a, mais pas dans b:

>>> set(a) - set(b) 
set([0, 1, 2, 3, 4, 5]) 

Pour obtenir la différence symétrique (c.-à-éléments qui sont présents dans un seul tableau, mais pas dans les deux):

>>> set(a)^set(b) 
set([0, 1, 2, 3, 4, 5, 10, 11, 12]) 

Et comme un bonus supplémentaire, les éléments qui sont présents dans les deux:

>>> set(a) & set(b) 
set([8, 9, 6, 7])