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.
rangese comporte de la même manière qu'en xrange2.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 () -1pour 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)
reverseden œuvre dans PEP-322 est trompeuse, il convient donc de noter qu'il reversedfera appel __reversed__à l'itérable et renverra le résultat, et pour les rangeobjets, il s'agit d'un range_objectité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])
globalet timen'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
sortedstockera inutilement toute la liste en mémoire, non? Ceci est du gaspillage et n'est pas réalisable pour les grands a.