Seite 1 von 1

Differenzen 2er Listen ausgeben

Verfasst: Montag 26. Januar 2009, 16:08
von tgooper
Hallo,

ich habe 2 Listen die die wie folgt aufgebaut sind
Liste 1:
  • (' 37829', '/560', ' 2.788,34 ')
    (' 37829', '9374', ' 2.788,34 ')
    (' 37829', '9374', ' 58,44 ')
    (' 37829', '9374', ' 548,22 ')
    (' 37612', '/560', ' 2.276,88 ')
    (' 37612', '9374', ' 2.276,88 ')
    (' 37612', '9374', ' 4.276,88 ')
Liste 2:
  • (' 37829', '/560', ' 2.788,34 ')
    (' 37829', '9374', ' 2.788,34 ')
    (' 37829', '9374', ' 158,44 ')
    (' 37612', '/560', ' 2.276,88 ')
    (' 37612', '/560', ' 1.111,88 ')
    (' 37612', '9374', ' 1.276,88 ')

Code: Alles auswählen

while l < len(neulist):
    if list1[l][2] != list2[l][2] and list1[l][0] == list2[l][0] and list1[l][1] == list2[l][1]:
       out_f.write("%s | %s | %s  | %s   \n" % (list2[l][0],list2[l][1], list1[l][2], list2[l][2],))
    l = l+1
Mein Problem:
Die Listen sind unterschiedlich lang und daruch verschiebt sich der Vergleich. Weiters gibt es mehrere Einträge, wo nur der letzte Wert unterschiedlich ist und wenn der Vergleich verschoben ist, dann gibt das Programm Werte aus die eigentlich gleich sind, da mit der falschen Zeile vergleichen wird.

Hat jemand von euch eine Idee wie man die richtigen Differenz der Listen bekommt?

Thanx
Tgooper

Verfasst: Montag 26. Januar 2009, 16:18
von derdon
Du musst mit Mengen (sets) statt mit Listen arbeiten. Wenn du die symmetrische Differenz (XOR) haben möchtest, dann hilft der ^ Operator, bei der Differenz der - Operator:

Code: Alles auswählen

In [17]: liste1 = ['guido', 42, ' is python and nothing else!']

In [18]: liste2 = ['guido', 42, 'sense of life']

In [19]: list(set(liste1) ^ set(liste2))
Out[19]: ['sense of life', ' is python and nothing else!']

In [20]: list(set(liste1) - set(liste2))
Out[20]: [' is python and nothing else!']

Verfasst: Montag 26. Januar 2009, 16:26
von DasIch
Welche Paare sollen den jeweils verglichen werden wenn es zu einer Verschiebung kommt?

Verfasst: Montag 26. Januar 2009, 16:36
von tgooper
Hallo derdon,

besten Dank für die genial einfache Lösung. Wieder hat Python bewiesen wie einfach man große Probleme lösen kann ;-)

Thanx
Tgooper