2017-09-20 12 views
0

zum Beispiel gibt es die folgenden zwei Listen von ListenVergleicht man zwei verschiedene Listen von Listen

A = [[0, 1, 2, 1, 9], [1, 0, 0, 6, 0], [2, 0, 0, 15, 2], [1, 6, 15, 0, 7], [9, 0, 2, 7, 0]] 

B = [[0, 19, 1, 0, 12], [19, 0, 2, 0, 0], [1, 2, 0, 0, 2], [0, 0, 0, 0, 3], [12, 0, 2, 3, 0]] 

so sind, was ich tun möchte, ist, möchte ich jeden Wert in der 2 andere Liste vergleichen Listen mögen. Ich möchte A [0] [0] mit B [0] [0] vergleichen, aber nicht A [0] [1] mit B [0] [0]. also im Grunde möchte ich vergleichen wie der erste Wert in der ersten Liste in A mit dem jeweiligen Wert in B und so weiter. Wie kann ich das machen? vielen Dank :) EDIT: Entschuldigung. Meine Längen der Listen waren unterschiedlich. Dies ist die aktualisierte Version.

+0

Möchten Sie wissen, wo die Liste nicht die gleiche ist? Alle Orte Unterschiede auftreten oder nur das erste Auftreten? – dopstar

+0

Hier ist Ihre Länge der Liste in B anders als in A? –

+0

Entschuldigung für die Verwirrung. Ich habe die Frage aktualisiert :) –

Antwort

3

Sie könnten eine doppelte Liste Verständnis verwenden, um immer den größten Wert zu wählen und eine neue, flache Liste erstellen:

>>> A = [[0, 1, 2, 1, 9], [1, 0, 0, 6, 0], [2, 0, 0, 15, 2], [1, 6, 15, 0, 7], [9, 0, 2, 7, 0]] 
>>> B = [[0, 19, 1, 0, 12], [19, 0, 2, 0, 0], [1, 2, 0, 0, 2], [0, 0, 0, 0, 3], [12, 0, 2, 3, 0]] 
>>> [max(a,b) for la,lb in zip(A,B) for a,b in zip(la,lb)] 
[0, 19, 2, 1, 12, 19, 0, 2, 6, 0, 2, 2, 0, 15, 2, 1, 6, 15, 0, 7, 12, 0, 2, 7, 0] 

Wenn Sie die 2-D-Struktur halten möchten, können Sie eine verschachtelte Liste Verständnis verwenden :

>>> [[max(a,b) for a,b in zip(la,lb)] for la,lb in zip(A,B)] 
[[0, 19, 2, 1, 12], [19, 0, 2, 6, 0], [2, 2, 0, 15, 2], [1, 6, 15, 0, 7], [12, 0, 2, 7, 0]] 
0

Angenommen, Sie wissen wollen, ob sie identisch sind:

def compare(a,b): 
    if (len(a) != len(b)) return false; 
    for i in range(0, len(a)): 
     if (len(a[i]) != len(b[i])) return false; 
     for j in range(0, len(a[i])): 
      if (a[i][j]!=b[i][j]) return false; 
    return true; 
+0

wenn nur auf Gleichheit überprüft: es ist nur 'A == B 'keine Notwendigkeit für alle Schleifen und so Zeug. Außerdem hat dies viele Syntaxfehler. – dopstar

+0

Überprüfen Sie einfach meine Antwort, ist mehr Python-Stil-Lösung für das gleiche Problem – rakwaht

5

Wenn Sie müssen wissen, ob sie identisch sind gerade diese laufen:

list1 = [['first',1], ['second',2], ['third',3]] 
list2 = [['first',1], ['second',2], ['third',3]] 
print(sorted(list1) == sorted(list2)) 

Ergebnis: true

1
#returns True if f is larger than s 
def compare(f, s): 
    print("comparing {} and {}".format(f,s)) 
    return f > s 

def compare_lists(A,B): 
    for sub_lists in zip(A,B): 
     for first, second in zip(sub_lists[0], sub_lists[1]): 
      compare(first, second) 

Sie haben nicht angegeben, welche Art von Vergleich Sie möchten. Die anderen Antworten gehen davon aus, dass Sie auf Gleichheit prüfen möchten. Dies ist ein allgemeinerer Ansatz. Setzen Sie die gewünschte Vergleichslogik in compare(f,s)

Bearbeiten: Ihre Unterlisten enthalten unterschiedliche Mengen von Elementen. Dieser Ansatz vergleicht nur die kürzeste Unterliste. Also für [1,2] und [1] wird nur 1 und 1 verglichen, da es keinen passenden Eintrag für 2 aus der ersten Liste gibt.

Edit2: Sie haben gerade Ihren Beitrag bearbeitet. Ich dachte, es ist beabsichtigt, dass die Längen unterschiedlich waren ...

+0

Ich möchte vergleichen, welche der größere Wert ist. Entschuldigung für die fehlende Erklärung. –

+0

ja die Längen können unterschiedlich sein, aber aufgrund meines Mangels an Erklärungen habe ich es auf gleiche Länge bearbeitet. –

2

Um zu überprüfen, ob zwei Listen gleich sind Sie einfach Gleichheitsprüfung wie folgt tun:

A == B 

Aber wenn Sie daran interessiert zu wissen, welche Elemente der Sublisten unterscheiden oder alternativ, welche Positionen oder Index „Koordinaten“, für die die Listen unterscheiden sich dann könnten Sie dies tun wollen:

A = [[0, 1, 2, 1, 9], [1, 0, 0, 6, 0], [2, 0, 0, 15, 2], [1, 6, 15, 0, 7], [9, 0, 2, 7, 0]] 
B = [[0, 19, 1, 0, 12], [19, 0, 2, 0, 0], [1, 2, 0, 0, 2], [0, 0, 0, 0, 3], [12, 0, 2, 3, 0]] 

differences = [ 
    (outer_idx, inner_idx) 
    for outer_idx, (a, b) in enumerate(zip(A, B)) 
    for inner_idx, (a_element, b_element) in enumerate(zip(a, b)) 
    if a_element != b_element 
] 

print(differences) 

# output 
[(0, 1), 
(0, 2), 
(0, 3), 
(0, 4), 
(1, 0), 
(1, 2), 
(1, 3), 
(2, 0), 
(2, 1), 
(2, 3), 
(3, 0), 
(3, 1), 
(3, 2), 
(3, 4), 
(4, 0), 
(4, 3)] 

All dies bedeutet, dass für (0, 1) die Listen unterschiedlich sind. zB: A[0][1] != B[0][1] und so weiter.

Verwandte Themen