Comment boucler à l'envers en python? [dupliquer]

cette question a déjà une réponse ici:

je parle de faire quelque chose comme:

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

je peux penser à des façons de le faire en python (création d'une liste de range(1,n+1) et inversez le, en utilisant while et --i ,...) mais je me demandais s'il y avait une façon plus élégante de le faire. Est-il?

EDIT: Certains ont suggéré que j'utilise xrange() au lieu de range () puisque range renvoie une liste alors que xrange renvoie un itérateur. Mais en Python 3 (que j'utilise) range() retourne un itérateur et xrange n'existe pas.

123
demandé sur snakile 2010-08-13 16:25:08

5 réponses

range() et xrange() prennent un troisième paramètre qui spécifie une étape. Ainsi, vous pouvez effectuer les opérations suivantes.

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. So,

xrange(10, 0, -1)

Note pour les utilisateurs de Python 3: Il n'y a pas de fonctions distinctes range et xrange dans Python 3, Il n'y a que range , qui suit le design de Python 2 xrange .

193
répondu Chinmay Kanchi 2018-09-18 01:44:43
for x in reversed(whatever):
    do_something()

cela fonctionne essentiellement sur tout ce qui a un ordre défini, y compris xrange objets et listes.

82
répondu habnabit 2010-08-13 12:27:14

toutes 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))
3
répondu chocolate codes 2016-07-15 21:35:33
def reverse(text):
    reversed = ''
    for i in range(len(text)-1, -1, -1):
        reversed += text[i]
    return reversed

print("reverse({}): {}".format("abcd", reverse("abcd")))
1
répondu Michael Qin 2016-06-25 19:49:10

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
0
répondu alex.hunter 2014-10-02 15:17:48