Differenzen 2er Listen ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
tgooper
User
Beiträge: 24
Registriert: Mittwoch 8. Februar 2006, 09:12

Differenzen 2er Listen ausgeben

Beitragvon tgooper » Montag 26. Januar 2009, 16:08

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
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Montag 26. Januar 2009, 16:18

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!']
DasIch
User
Beiträge: 2404
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Montag 26. Januar 2009, 16:26

Welche Paare sollen den jeweils verglichen werden wenn es zu einer Verschiebung kommt?
tgooper
User
Beiträge: 24
Registriert: Mittwoch 8. Februar 2006, 09:12

Beitragvon tgooper » Montag 26. Januar 2009, 16:36

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder