Seite 1 von 1

2 Arrays vergleichen

Verfasst: Dienstag 15. November 2011, 09:36
von Ing2008
Hallo,

Ich möchte 2 Arrays mit evtl. unterschiedlicher Länge mit je 2 Spalten vergleichen.
Es geht nur um den Vergleich der 2ten Spalte die einen String enthält.

Die 2 Arrays habe ich jeweils aus einer .csv Datei eingelesen. Das funktioniert so weit.

zum testen sind die Anzahl der Zeilen gleich (5).

So funktioniert es nicht, da wird nur jede Zeile zeichenweise durchlaufen.
Spalte 1 ist die zu vergleichende Spalte:

Code: Alles auswählen

    for i in range(0, 5):
        print str(i) + " : " + line_values1[1][i] + "==" + line_values2[1][i]
        if line_values1[1][i] == line_values2[1][i]:
          lines_passed += 1
        else:
          lines_failed += 1
Wie kann ich in der for-schleife jede Zeile direkt vergleichen, und nicht zeichenweise?

Die arrays können unterschiedliche Anzahl von Zeilen haben, wie fang ich das am besten ab?

Danke für Eure Hilfe!

Re: 2 Arrays vergleichen

Verfasst: Dienstag 15. November 2011, 10:59
von BlackJack
@Ing2008: So wie es da steht vergleichst Du die Spalten der zweiten Zeilen miteinander. Der erste Index ist die Zeile, denn die Liste (Arrays sind in Python in der Regel etwas anderes) enthält ja Listen, die jeweils die Zeilen repräsentieren. Die Formulierung, dass jede Zeile zeichenweise durchlaufen wird, passt da also auch nicht.

Ausserdem fallen zwei „unpythonische“ Vorgehensweisen bei dem Quelltext auf:

1. ``for index in range(obj):`` um dann `index` dazu zu verwenden auf ``obj`` ist in Python in 99,9% der Fälle eine unnötige Indirektion. Man kann direkt über die Elemente von Sequenzen iterieren. Wenn man wie in diesem Falle paarweise Elemente von zwei iterierbaren Objekten benötigt, gibt es `zip()` beziehunsweise `itertools.izip()`.

2. `str()` und ``+`` um sich Zeichenketten zusammen zu basteln. Das sieht so verdammt nach BASIC aus. ;-) In Python verwendet man eher Zeichenkettenformatierung mittels ``%``-Operator oder `format()`-Methode auf Zeichenketten.

Bei unterschiedlicher Anzahl von Zeilen ist die Frage wie das behandelt werden soll. Schau Dir am besten erst einmal an was `itertools.izip()` mit diesen Zeilen macht. Vielleicht reicht das ja schon aus.