Re: Vergleich von 2 Listen
Verfasst: Donnerstag 19. August 2010, 09:20
@all: Seit wann hat denn der eingebettete Code keine Zeilennummerierung mehr?
Zum Problem:
geht natürlich nicht. Hinter 'for' kann nur ein Bezeichner oder eine Folge von Bezeichnern stehen. Listenpaare enthält ja Tupel, also könnte man folgendes schreiben:
Das hat außerdem den Vorteil, daß man sofort sieht, was hinter dem Wert steckt. Alternativ kannst du auch weiterhin 'ex1' verwenden, mußt dann aber im Hinterkopf behalten, daß das ein Tupel ist. Weiter unten kommt dann die Abfrage, ob der Suchwert in external_faces enthalten ist. Je nach eingeschlagenem Weg würde das dann so aussehen:
oder
Such dir die in deinen Augen lesbarere Variante aus 
Statt 'in' zu verwenden, kannst du natürlich auch selbst über 'external_faces2' iterieren:
Bleibt das Problem, daß du in 'external_faces' den ggf. gefundenen Wert ersetzen mußt. Hierzu brauchst du nun aber den Index. Diesen kannst du z.B. über gewinnen, dies liefert dir aber immer nur den Index des ersten Auftretens des gesuchten Wertes. Was nicht unbedingt das ist, was du willst. (Es gibt allerdings noch einen zweiten Parameter für index -> mal in die Doku schauen).
Viel schöner ist der Einsatz von 'enumerate':
Ich hoffe, es ist jetzt etwas klarer geworden.
Zum Problem:
Code: Alles auswählen
for [ex1[0]] in ...
Code: Alles auswählen
for suchwert, zielwert in listenpaare:
Code: Alles auswählen
if suchwert in external_faces2:
Code: Alles auswählen
if ex1[0] in external_faces2:

Statt 'in' zu verwenden, kannst du natürlich auch selbst über 'external_faces2' iterieren:
Code: Alles auswählen
for ex2 in external_faces2:
if ex1[0] == ex2: # Beachte: ex2 ist bereits der aktuelle Wert! Kein Indizieren nötig!
Code: Alles auswählen
external_faces2.index(wert)
Viel schöner ist der Einsatz von 'enumerate':
Code: Alles auswählen
for index, ex2 in enumerate(external_faces2):
pass