2016-11-29 3 views
0

Ich habe eine Frage über die Reihenfolge der Iteration in einer Liste, wenn ich eine for-Schleife verwenden. Ich versuche, eine Liste von Paaren durchzugehen und einige Operationen an ihnen durchzuführen. Zum Beispiel betrachtet diesen Code:in Python 2.7 Reihenfolge der Iteration mit for Schleife

for j in my EdgeList: #Edgelist= [(4,5),(5,6)] 
    mylist.append(j) 

Aber ich dachte, wenn ich diesen Code verwende der Wert von j wird das erste Paar (4,5) in der ersten Schleife und dann wird es das zweite Paar nehmen (5 , 6) auf der zweiten Schleife. Wenn ich das Programm zeilenweise debugge, merkte ich, dass es manchmal das letzte Paar anstelle des ersten und bei einem anderen Debug-Durchlauf das erste Paar zuerst nimmt. Ich möchte wissen, ob das für Python normal ist oder nicht.

+0

zurückzugeben. Die Elemente in einer Liste werden immer nacheinander durchlaufen. Wenn Sie glauben, dass Sie bei der Verwendung einer Standard-For-Schleife in einer anderen Reihenfolge iteriert haben, haben Sie etwas falsch gemacht. –

+2

Sind Sie * sicher * 'EdgeList' ist eine Liste und nicht, sagen wir, ein' set'? – brianpck

+0

Ich habe gerade in meinem Debugger festgestellt, dass die EdgeList wie diese ist ([(4,5), (5,6)]) wäre das der Grund für dieses Problem? –

Antwort

1

Wenn EdgeList eine Liste ist, beginnt die Iteration immer vom ersten Index bis zum letzten. Diese beiden sollten das gleiche Ergebnis ausgeben:

>>> i = 0 
>>> l = [1,2,3,4,5] 
# Don't use a while loop like this… please. 
>>> while i < len(l): 
... print(l[i]) 
... i+= 1 
# outputs 1 2 3 4 5 separated by newlines 
>>> for item in l: 
... print(item) 
# outputs 1 2 3 4 5 separated by newlines 

Es gibt Zeiten, in denen EdgeList tatsächlich keine Liste ist. Set s, zum Beispiel keine Garantie für die Reihenfolge, noch sind die Schlüssel der Wörterbücher. Das bedeutet, dass {'f':1,'g':2}.keys() nicht haben, um eine Sequenz in der Reihenfolge

+0

danke. Wie kann ein Set in eine Liste umgewandelt werden? so dass ich die bestellung garantieren kann. Ich bekomme die Liste der Kanten von einer NetworkX-Funktion nx.minimum_edge_cut (G, Quelle, Senke), also muss ich dann den Satz in eine Liste umwandeln, um damit umzugehen, um –

+0

@NadaAlzaben Keine Notwendigkeit, in Liste umzuwandeln, tun a sortiert (s), wobei s dein Set ist. Denken Sie daran, das Ergebnis zu speichern, da dies nicht direkt erfolgt. – themistoklik

+0

@themistoklik Wenn ich sortierte (s) verwende, wird die for-Schleife in Reihenfolge durchlaufen? –

Verwandte Themen