web-dev-qa-db-fra.com

pour ou pendant la boucle pour faire quelque chose n fois

Dans Python vous avez deux manières fines de répéter une action plus d'une fois. L'une d'elles est la boucle while et l'autre - for loop. un aperçu de deux simples morceaux de code:

for i in range(n):
    do_sth()

Et l'autre:

i = 0
while i < n:
    do_sth()
    i += 1

Ma question est laquelle est la meilleure. Bien sûr, le premier, qui est très courant dans les exemples de documentation et les différents morceaux de code que vous pouvez trouver sur Internet, est beaucoup plus élégant et plus court, mais d'un autre côté, il crée une liste d'entiers complètement inutile juste pour boucler leur. N'est-ce pas un gaspillage de mémoire, surtout en ce qui concerne un grand nombre d'itérations?

Alors qu'en pensez-vous, quelle voie est la meilleure?

27
Sventimir

mais d'un autre côté, il crée une liste d'entiers complètement inutile juste pour faire une boucle sur eux. N'est-ce pas un gaspillage de mémoire, surtout en ce qui concerne un grand nombre d'itérations?

C'est à cela que sert xrange(n). Il évite de créer une liste de nombres et fournit simplement un objet itérateur.

Dans Python 3, xrange() a été renommé range() - si vous voulez une liste, vous devez la demander spécifiquement via list(range(n)).

39
Amber

C'est un poids plus léger que xrange (et la boucle while) car il n'a même pas besoin de créer les objets int. Il fonctionne également aussi bien en Python2 qu'en Python3

from itertools import repeat
for i in repeat(None, 10):
    do_sth()
15
John La Rooy

La différence fondamentale dans la plupart des langages de programmation est que sauf si l'inattendu se produit, une boucle for va toujours répéter n fois puis terminez par une boucle while il peut répéter 0 times, 1, more or even forever, en fonction d'une condition donnée qui est toujours vraie au début de chaque boucle et toujours fausse à la sortie de la boucle, (pour être complet a do ... while boucle, (ou repeat until), pour les langues qui en disposent, s'exécute toujours au moins une fois et ne garantit pas la condition à la première exécution).

Donc, la réponse à votre question est ' tout dépend de ce que vous essayez de faire '!

2
Steve Barnes