Comment boucler à l'envers en python? [dupliquer]
cette question a déjà une réponse ici:
- Boucle à l'envers en utilisant des indices en Python? 12 réponses
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.
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
etxrange
dans Python 3, Il n'y a querange
, qui suit le design de Python 2xrange
.
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.
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))
def reverse(text):
reversed = ''
for i in range(len(text)-1, -1, -1):
reversed += text[i]
return reversed
print("reverse({}): {}".format("abcd", reverse("abcd")))
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