Comment fonctionne la fonction range de Python?

tous,Je ne suis pas vraiment comprendre pour boucle dans les suivants, quelqu'un peut-il donner quelques conseils?merci à l'avance

for i in range(5):
      print i

alors il donne 0,1,2,3,4 est-ce que ce python attribue 0,1,2,3,4 à moi en même temps? cependant, si j'ai écrit:

for i in range(5):
      a=i+1

puis-je appeler, il donne 5 seulement, mais si j'ajoute "imprimer" il donne 1,2,3,4,5 .Donc ma question est quelle est la différence ici? je suis une ficelle ou une liste ou autre chose? ou peut-être quelqu'un peut-il m'aider à trier :

for l in range(5):
    #vs,fs,rs are all m*n matrixs,got initial values in,i.e vs[0],fs[0],rs[0] are known
    #want use this foor loop to update them
    vs[l+1]=vs[l]+fs[l]
    fs[l+1]=((rs[l]-re[l])
    rs[l+1]=rs[l]+vs[l]
#then this code gives vs,fs,rs

si je lance ce genre de code, alors j'aurai la réponse que lorsque l=5...Comment puis-je les faire commencer à Boucler?j'.e l=0 a obtenu des valeurs de vs[1],fs[1],rs[1], puis l=1 a obtenu les valeurs de vs[2],rs[2],fs[2]......et ainsi de suite.mais python donne différents tableaux de fs, vs, rs, correspondent à différentes valeurs de l, Comment puis-je leur faire une pièce? il suffit de mettre à jour les lignes, merci

20
demandé sur SilentGhost 2009-11-15 20:06:38

6 réponses

Une "boucle" dans la plupart, si pas tous, les langages de programmation est un mécanisme pour exécuter un morceau de code plus d'une fois.

ce code:

for i in range(5):
    print i

peut être pensée de travailler comme cela:

i = 0
print i
i = 1
print i
i = 2
print i
i = 3
print i
i = 4
print i

Donc, vous voyez, ce qui se passe n'est pas que i obtient la valeur 0, 1, 2, 3, 4 en même temps, mais plutôt de manière séquentielle.

je suppose que quand vous dites "appeler un, il ne donne que 5", tu veux dire comme ceci:

for i in range(5):
    a=i+1
print a

ce imprime le dernière valeur que a a été donné. Chaque fois que la boucle itère, la déclaration a=i+1 écrasera la dernière valeur a eu avec la nouvelle valeur.

le Code s'exécute essentiellement de manière séquentielle, de haut en bas, et une boucle for Est un moyen de faire revenir le code et quelque chose de nouveau, avec une valeur différente pour l'une des variables.

j'espère que cela a répondu à votre question.

48
répondu Lasse Vågsæther Karlsen 2009-11-15 17:11:13

quand j'enseigne la programmation À quelqu'un (à peu près n'importe quelle langue), j'introduis for boucles avec une terminologie similaire à cet exemple de code:

for eachItem in someList:
    doSomething(eachItem)

... ce qui, comme par hasard, est du code Python valide sur le plan syntaxique.

Le Python range() fonction simple retourne ou génère une liste d'entiers à partir d'une limite inférieure (zéro, par défaut) jusqu'à (mais sans inclure) une limite supérieure, éventuellement par incréments (pas) d'un autre Nombre( un, par défaut.)

range(5) retourne (ou peut-être produit) une séquence: 0, 1, 2, 3, 4 (jusqu'à la limite supérieure).

Un appel à range(2,10) retournerait: 2, 3, 4, 5, 6, 7, 8, 9

Un appel à range(2,12,3) retournerait: 2, 5, 8, 11

notez que j'ai dit, quelques fois, que Python est range() retour de fonction ou génère une séquence. Il s'agit d'une distinction relativement avancée qui ne sera pas un problème pour un novice. Dans les versions plus anciennes de Python range() construit une liste (mémoire attribuée pour elle et remplie avec des valeurs) et retourné une référence à cette liste. Cela pourrait être inefficace pour de grandes gammes qui pourraient consommer tout à fait un peu de mémoire et pour certaines situations où vous pourriez vouloir itérer sur certains éventuellement large gamme de nombres, mais étaient susceptibles de "

Python supporte des moyens plus efficaces de mettre en œuvre la même sémantique (de faire la même chose) à travers une construction de programmation appelée générateur. Au lieu d'allouer et de peupler la liste entière et de la retourner sous forme de structure de données statiques, Python peut instancier un objet avec les informations requises (limites supérieure et inférieure et valeur step/increment) ... et de retourner une référence à cela. L'objet garde alors la trace de ce qui numéro il est retourné le plus récemment et calcule les nouvelles valeurs jusqu'à ce qu'il atteigne la limite supérieure (et quel point il signale la fin de la séquence à l'appelant en utilisant une exception appelée "StopIteration"). Cette technique (qui consiste à calculer des valeurs de façon dynamique plutôt que toutes à la fois, à l'avance) est appelée "évaluation paresseuse"."

Autres constructions dans la langue (telles que celles qui sous-tendent le for boucle) peut alors travailler avec l'objet comme s'il s'agissait d'une liste.

Pour dans la plupart des cas, vous n'avez pas à savoir si votre version de Python utilise l'ancienne implémentation de range() sur une ancienne version de Python. Dans de tels cas, vous pouvez repenser votre conception et utiliser while boucles, ou créer des objets qui implémentent "évaluation paresseuse" sémantique d'un générateur, ou utiliser le xrange() version de range() si votre version de Python l'inclut, ou le range() fonction d'une version de Python qui utilise les générateurs implicitement.

des Concepts tels que les générateurs, et des formes plus générales d'évaluation paresseuse, imprègnent la programmation Python alors que vous allez au-delà des bases. Ce sont généralement des choses que vous n'avez pas à savoir pour les tâches de programmation simples, mais qui deviennent importantes que vous essayez de travailler avec plus grande des ensembles de données ou à l'intérieur de contraintes plus strictes (limites de temps/performance ou limites de mémoire, par exemple).

17
répondu Jim Dennis 2014-09-09 06:07:33
for i in range(5):

est le même que

for i in [0,1,2,3,4]:
7
répondu Josh Pearce 2009-11-15 17:12:35

range(x) retourne une liste de nombres de 0 à x - 1.

>>> range(1)
[0]
>>> range(2)
[0, 1]
>>> range(3)
[0, 1, 2]
>>> range(4)
[0, 1, 2, 3]

for i in range(x): exécute le corps (qui est print i dans ton premier exemple) une fois pour chaque élément de la liste renvoyée par range(). i est utilisé à l'intérieur du corps pour faire référence à l'élément "courant" de la liste. Dans ce cas, i renvoie un entier, mais il peut être de tout type, en fonction de l'objet sur lequel vous boucle.

6
répondu Bastien Léonard 2009-11-15 17:16:50

range la fonction vous donnera une liste de nombres, tandis que le for boucle parcourir la liste et exécuter le code, pour chacun de ses éléments.

for i in range(5):
      print i

ceci exécute simplement print i cinq fois, pour i allant de 0 à 4.

for i in range(5):
      a=i+1

ceci exécutera a=i+1 cinq fois. Puisque vous êtes en écrasant la valeur de a à chaque itération, à la fin, vous obtenez seulement la valeur de la dernière itération, qui est de 4+1.

Utile links:

http://www.network-theory.co.uk/docs/pytut/rangeFunction.html

http://www.ibiblio.org/swaroopch/byteofpython/read/for-loop.html

0
répondu Konamiman 2009-11-15 17:11:34

C'est une boucle, probablement le problème est dans le cadre de l'impression...

si vous ne pouvez pas trouver la logique où le système imprime, ajoutez juste ce qui suit où vous voulez que le contenu soit sorti:

for i in range(len(vs)):
    print vs[i]
    print fs[i]
    print rs[i]
0
répondu Santi 2009-11-15 17:15:21