J'essaie de boucler de 100 à 0. Comment faire cela en Python?
for i in range (100,0)
ne fonctionne pas.
range(100)[::-1]
(qui est automatiquement traduit en range(9, -1, -1)
) - Testé en python 3.7
J'essaie de boucler de 100 à 0. Comment faire cela en Python?
for i in range (100,0)
ne fonctionne pas.
range(100)[::-1]
(qui est automatiquement traduit en range(9, -1, -1)
) - Testé en python 3.7
Réponses:
Essayez range(100,-1,-1)
, le 3ème argument étant l'incrément à utiliser (documenté ici ).
(Les options "plage", démarrage, arrêt, étape sont documentées ici )
À mon avis, c'est le plus lisible:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
à xrange(len(list)-1:-1:-1)
; ce dernier a juste l'air bizarre avec tant de personnes -1
.
range
se comporte de la même manière qu'en xrange
2.7. @hacksoi dépend du cas d'utilisation, mais disons que vous effectuez une itération en arrière dans un grand tampon, disons que c'est 10 Mo, puis créer les indices inverses à l'avance prendrait quelques secondes et utiliserait plus de 50 Mo de mémoire. L'utilisation d'un générateur inversé prendrait des millisecondes et n'utiliserait que quelques octets de mémoire.
Pourquoi votre code n'a pas fonctionné
Votre code for i in range (100, 0)
va bien, sauf
le troisième paramètre ( step
) est par défaut +1
. Vous devez donc spécifier le 3ème paramètre à range () -1
pour reculer.
for i in range(100, -1, -1):
print(i)
REMARQUE: cela inclut 100 et 0 dans la sortie.
Il y a plusieurs façons.
Meilleure façon
Pour la manière pythonique, vérifiez PEP 0322 .
Il s'agit d'un exemple pythonique Python3 pour imprimer de 100 à 0 (y compris 100 et 0).
for i in reversed(range(101)):
print(i)
reversed
en œuvre dans PEP-322 est trompeuse, il convient donc de noter qu'il reversed
fera appel __reversed__
à l'itérable et renverra le résultat, et pour les range
objets, il s'agit d'un range_object
itérateur évalué paresseux . En bref: l'utilisation de cette méthode est toujours une évaluation paresseuse.
for var in range(10,-1,-1)
travaux
J'ai essayé cela dans l'un des exercices de codeacademy (inverser les caractères d'une chaîne sans utiliser ni inversé ni :: -1)
def reverse(text):
chars= []
l = len(text)
last = l-1
for i in range (l):
chars.append(text[last])
last-=1
result= ""
for c in chars:
result += c
return result
print reverse('hola')
Je voulais parcourir deux listes en arrière en même temps, donc j'avais besoin d'un indice négatif. Voici ma solution:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Résultat:
-1 2
-2 5
-3 4
-4 3
-5 1
Oh d'accord, lisez mal la question, je suppose qu'il s'agit de revenir en arrière dans un tableau? si oui, j'ai ceci:
array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]
counter = 0
for loop in range(len(array)):
if loop <= len(array):
counter = -1
reverseEngineering = loop + counter
print(array[reverseEngineering])
global
et time
n'est pas pertinente pour la question initiale.
Vous pouvez également créer un mécanisme inverse personnalisé en python. Qui peut être utilisé n'importe où pour boucler une boucle en arrière
class Reverse:
"""Iterator for looping over a sequence backwards"""
def __init__(self, seq):
self.seq = seq
self.index = len(seq)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index -= 1
return self.seq[self.index]
>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
... print(i)
...
5
4
3
2
1
a = 10
for i in sorted(range(a), reverse=True):
print i
sorted
stockera inutilement toute la liste en mémoire, non? Ceci est du gaspillage et n'est pas réalisable pour les grands a
.