2010-04-12 3 views
5

Quelle est la meilleure façon de faire cela en Python?For-loops en Python

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

J'ai essayé Google d'abord, mais aussi loin que je peux voir la seule solution serait d'utiliser while.

Répondre

13

La façon de le faire est avec xrange():

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

(Ou, en Python 3.x, avec range() au lieu de xrange().) // est division Flooring, ce qui fait que le résultat est un nombre entier .

+0

La version de hughdbrown devrait être marquée comme la bonne réponse – rbp

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

où v et n sont int s ou traité comme int s. Cela signifie que la division sera une division entière, c'est-à-dire, 1/2 == 0 is True.

Remarque: Ceci est pour Python 2.x.

+0

-1: Ceci a un trop peu d'articles. Il omet incorrectement '0'. Séparément, dans python3, il échoue car 'n/2' génère un flottant (' TypeError: 'float' ne peut pas être interprété comme un entier). Mais peut-être est-ce la raison pour laquelle vous avez dit que c'est pour python 2.x. – hughdbrown

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

Cependant, dans 90% des cas où vous auriez utilisé une boucle for en C/Java/C#/VB, ce que vous voulez vraiment est list comprehension:

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

-1: Cela a un trop d'éléments. Il inclut incorrectement 'n // 2'. – hughdbrown

15

je referais ce :

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

Il est un peu plus clair que c'est une séquence inverse, quelle est la limite inférieure et quelle est la limite supérieure.

+3

ou 'reverse (xrange (...))', ça marche aussi. – tzot

+0

+1 J'aime plus –

+1

@ ΤΖΩΤΖΙΟΥ: true, mais cela n'a pas l'avantage que vous pourriez en espérer. range() dans pythons pré-3.0 tire toutes les données à la fois. xrange() agit comme un générateur, ne tirant qu'un seul élément à la fois. Mais si vous voulez inverser une séquence, vous avez besoin de toutes les données à la fois, donc inversé (range()) et inversé (xrange()) fonctionnera de la même manière: ils auront chacun toutes les données tirées avant est inversé. – hughdbrown