web-dev-qa-db-fra.com

Comment faire une boucle en arrière en python?

Je parle de faire quelque chose comme:

for(i=n; i>=1; --i) {
   //do something with i
}

Je peux penser à certaines façons de le faire dans python (créer une liste de range(1,n+1) et l'inverser, en utilisant while et --i, ...), mais je se demandait s'il y avait un moyen plus élégant de le faire. Y a-t-il?

EDIT: Certains suggèrent d’utiliser xrange () au lieu de range () car range renvoie une liste, tandis que xrange renvoie un itérateur. Mais dans Python 3 (que j'utilise par hasard), range () renvoie un itérateur et xrange n'existe pas.

154
snakile

range() et xrange() prennent un troisième paramètre qui spécifie une étape. Donc, vous pouvez faire ce qui suit.

range(10, 0, -1)

Qui donne

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 

Mais pour l'itération, vous devriez vraiment utiliser xrange à la place. Alors,

xrange(10, 0, -1)

Remarque pour Python 3 utilisateurs: Il n’existe pas de fonctions range et xrange distinctes dans Python 3, il n’existe que range, qui suit conception de Python _ xrange 2.

237
Chinmay Kanchi
for x in reversed(whatever):
    do_something()

Cela fonctionne sur pratiquement tout ce qui a un ordre défini, y compris les objets et les listes xrange.

113
habnabit

Ces trois solutions donnent les mêmes résultats si l’entrée est une chaîne:

1.

def reverse(text):
    result = ""
    for i in range(len(text),0,-1):
        result += text[i-1]
    return (result)

2.

text[::-1]

3.

"".join(reversed(text))
5
chocolate codes
def reverse(text):
    reversed = ''
    for i in range(len(text)-1, -1, -1):
        reversed += text[i]
    return reversed

print("reverse({}): {}".format("abcd", reverse("abcd")))
2
Michael Qin

Pour inverser une chaîne sans utiliser reversed ou [::-1], essayez quelque chose comme:

def reverse(text):
    # Container for reversed string
    txet=""

    # store the length of the string to be reversed
    # account for indexes starting at 0
    length = len(text)-1

    # loop through the string in reverse and append each character
    # deprecate the length index
    while length>=0:
        txet += "%s"%text[length]
        length-=1
    return txet
1
alex.hunter