Python For-Schleifen sind eigentlich Foreach-Schleifen. Sie tun können,
ref =[1,2,3,4]
obt =[0.5,1,1.5,5]
for i in range(len(ref)):
if (obt[i] <= ref[i]):
print ("all ok")
else:
print("error")
Die Range-Funktion durch die Zahlen 0 bis die Länge Ihres Arrays durchlaufen wird, range(len(ref)) = [0,1,2,3]
Sie können dann für die in Python verwenden ist eigentlich ein foreach diese Zahlen zu greifen.
Die enumerate Funktion gibt Ihnen sowohl den Index und den Wert, so dass Sie auch
ref =[1,2,3,4]
obt =[0.5,1,1.5,5]
for i,r in enumerate(ref):
if (obt[i] <= r):
print ("all ok")
else:
print("error")
Die enumerate Funktion den Index und ref[i]
, die in i und r gespeichert wird gibt wieder tun können. Dieses Beispiel zeigt besser, wie sich Python wie eine Foreach-Schleife und nicht wie eine For-Schleife verhält.
Der Grund für den Fehler
Auf der Linie i,j=0
haben Sie j einen Wert als auch zu geben, so würden Sie i,j=0,0
tun. Was hier passiert, ist, dass 0,0
dasselbe ist wie (0,0)
. Es ist ein Tupel. Das Tupel muss dann ausgepackt werden. Wenn ein Tupel entpackt wird, erhält die erste Variable i den ersten Wert 0. Die zweite Variable j erhält den zweiten Wert. Und wenn es im Tupel mehr Werte gäbe, würde dies weitergehen, bis jeder Wert im Tupel in eine Variable entpackt ist.
Sobald dies behoben ist, können wir mit der nächsten Zeile fortfahren. for i,j in obt,ref
. Noch einmal, Sie werden den genau gleichen Fehler sehen. Dieses Mal erwartet Python, über etwas in Form von [(2 value tuple), (2 value tuple), (2 value tuple), (2 value tuple)]
zu iterieren.
Die zip Funktion kann verwendet werden, um diese Struktur zu schaffen, wie oben vorgeschlagen wurde, oder wenn Sie es vorziehen, die Indizes in einer for-Schleife verwenden, können Sie for i in range(len(ref))
verwenden, um die Liste der Indizes [0,1,2,3]
iterieren. Diese funktionieren nur, wenn ref und obt die gleiche Länge haben, ansonsten muss man zip verwenden.
Beide Wege funktionieren, mit Zip, oder die Methode, die ich erwähnte, es liegt an Ihnen, wie Sie das Problem lösen wollen. Wenn eine Liste länger als die andere ist, schneidet zip die längeren Listen ab. Die itertools.zip_longest-Lösung, die Games Braniac erwähnt, erweitert die Liste der kürzesten Länge so, dass sie dieselbe Größe haben, und reißt sie dann zusammen.
Dies ist nicht das Problem, aber Sie brauchen nicht global innerhalb einer for-Schleife –
Sie sollten sich die Antwort, die 'z ip' Ich glaube, das ist der beste Weg, um über zwei Listen zu iterieren, Sie brauchen auch keine Importanweisungen – northsideknight