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.
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
etxrange
distinctes dans Python 3, il n’existe querange
, qui suit conception de Python _xrange
2.
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
.
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