2017-03-12 4 views
1

Ich versuche, die fehlenden Elemente zwischen arr1 und arr2 zu finden, aber nicht sicher, was das Problem mit dem Code ist, warum es nicht funktioniert. Bitte vorschlagen.Python-Schleife liefert keine erwartete Ausgabe

def miss2(arr1, arr2): 
    arr3=arr1 
    for i in arr1: 
     # print(i) 
     for j in arr2: 
      # print(i,j) 
      if i == j: 
       arr3.remove(j) 

    print(arr3) 

arr1=[1,2,3,4] 
arr2=[1,2] 

miss2(arr1,arr2) 

Ergebnis: [2, 3, 4] statt [3, 4]

+1

Sie benötigen eine Kopie nicht nur eine neue Referenz 'arr3 = arr1 erstellen [:] ', behebt das Problem. – AChampion

+0

so albern danke – user3752941

Antwort

3

Objekte in Python werden durch Referenz gespeichert, was bedeutet, dass Sie nicht den Wert von arr1 zu arr3 zugewiesen haben, aber ein Zeiger auf die object.You kann Verwenden Sie den Operator is, um zu testen, ob zwei Objekte dieselbe Adresse im Speicher haben.

Sequenzen können so durch Schneiden kopiert Sie diese Liste kopieren verwenden können:

arr3 = arr1[:] 

Sie können auch

arr3 = list(arr1) 

oder Sie können copy() Modul verwenden:

from copy import copy 
arr3 = copy(arr1) 

Übrigens können Sie dies versuchen:

print [i for i in arr1 if i not in arr2] 
0

McGrady hat Recht. Hier ist ein Artikel, der Ihnen mehr über das Referenzproblem erzählt. Is Python call-by-value or call-by-reference?

Und können Sie „set“ Datenstruktur statt „Liste“ (die Mathematik Konzept betrachten), hier:

x = set([1,2,3,4]) 
y = set([1,2]) 
x - y 
Verwandte Themen