2016-04-06 8 views
0

Ich habe ein einfaches Problem, aber ich bin ein paar Hürden. Das Problem ist, wie diese, ich habe 2 Arrays:Erstellen von Array mit Vergleich von anderen Arrays in Python

a=['A','B','C','D','E'] 
i=['C','F'] 

Ich versuche, die zwei und wo ein Element in der zweiten Reihe (i) zu vergleichen ist nicht auf ein Element in dem ersten Spiel, ich versuche, das Array (i) mit der Position der Fehlpaarung, und füllen sie ihn mit einem leeren Wert ('')

So zu aktualisieren, ich versuche, mit dieser Lösung am Ende:

i=['','',C,'','',F] 

I versuchte die Einfügemethode:

for n,x in enumerate(a): 
    for item in i: 
     if x != item: 
      i.insert(n,'') 

nicht

Antwort

2

Diese Liste Verständnis Arbeit tun, was Sie nach:

a_set = set(a) # using sets allows the `in` function to run in 
i_set = set(i) # constant time vs. running in linear time (its faster for large data sets) 
[x if x in i_set else "" for x in a] + [x for x in i if x not in a_set] 

es durch jedes Element von a zuerst eingezogen wird. Wenn es in i erscheint, fügt es das Element hinzu, andernfalls fügt es "" hinzu. Dann geht es durch jedes Element von i, prüft, ob es in a erscheint, und wenn nicht, fügt es es der Liste hinzu. Diese beiden Listen werden dann unter Verwendung des Operators + aneinander angehängt.

Sie können dies dann i zuweisen, um die gewünschte Ausgabe zu erhalten.

>>> a_set = set(a) 
>>> i_set = set(i) 
>>> i =[x if x in i_set else "" for x in a] + [x for x in i if x not in a_set] 
>>> i 
["", "", "C", "", "", "F"] 
+0

einen Satz verwenden für '... wenn x in i ...' und '... wenn x nicht in a]' sollten diesen Code ausführen machen deutlich schneller für große Datenmengen – Jules

+0

Ich bin nicht sicher, ob die Erhaltung der Ordnung von Bedeutung ist, aber es ist anzumerken, dass, wenn "i = ['0', 'C', 'F']" ergibt dies das Ergebnis von '[' ',' ',' C ',' ' , '', '0', 'F'] 'statt' ['0', '', '', 'C', '', '', 'F'] '. –

+0

@JulesTamagnan Danke. –

Verwandte Themen