2010-04-12 8 views
5

Was ist der beste Weg, dies in Python zu tun?For-Schleifen in Python

for (v = n/2 - 1; v >= 0; v--) 

ich tatsächlich versucht Google zuerst, aber soweit ich die einzige Lösung while zu verwenden wäre zu sehen.

Antwort

13

Die Art und Weise, es zu tun mit xrange():

for v in xrange(n // 2 - 1, -1, -1): 

(Oder in Python 3.x, mit range() statt xrange().) // ist Bodenbelags-Geschäftsbereich, der das Ergebnis stellt sicher, dass eine ganze Zahl ist .

+0

Hughdbrowns Version sollte als die richtige Antwort markiert werden – rbp

-1
for v in xrange(n/2 - 1, 0, -1): 
    #your code here 

Wo v und n int s oder als int s behandelt. Dies bedeutet, dass die Division eine ganzzahlige Division ist, d. H. 1/2 == 0 is True.

Hinweis: Dies ist für Python 2.x.

+0

-1: Dies hat ein zu wenig Elemente. Es enthält fälschlicherweise "0". Separat, in Python3 schlägt es fehl, weil 'n/2' einen Gleitkommawert generiert (' TypeError: 'float' Objekt kann nicht als Integer interpretiert werden). Aber vielleicht hast du deswegen gesagt, dass es für Python 2.x ist. – hughdbrown

5
for v in range(n//2, -1, -1) 

jedoch in 90% der Fälle, wenn Sie in C/Java/C#/VB eine for Schleife verwendet haben würde, was Sie wirklich wollen, ist list comprehension:

listOfStuff = [doSomethingWith(v) for v in range(n//2, -1, -1)] 
+0

-1: Dies hat eine zu viele Elemente. Es enthält fälschlicherweise 'n // 2'. – hughdbrown

15

ich dies tun würde :

for i in reversed(range(n // 2)): 
    # Your code 
    pass 

Es ist ein bisschen klarer, dass dies ein umgekehrter Reihenfolge, was die untere Grenze ist, und das, was die obere Grenze ist.

+3

oder umgekehrt (xrange (...)) ', das funktioniert auch. – tzot

+0

+1 Ich mag dies am besten –

+1

@ ΤΖΩΤΖΙΟΥ: stimmt, aber das hat nicht den Vorteil, den Sie vielleicht denken. Bereich() in Pre-3.0 Pythons zieht alle Daten auf einmal. xrange() verhält sich wie ein Generator und zieht nur einen Gegenstand nach dem anderen. Aber wenn Sie eine Sequenz umkehren, benötigen Sie alle Daten auf einmal, also umgekehrt (range()) und umgekehrt (xrange()) wird auf die gleiche Weise funktionieren: Sie werden alle Daten davor gezogen haben ist umgekehrt. – hughdbrown