8
votes

Pour X dans Y, tapez itération en python. Puis-je savoir quelle itération je suis actuellement sur?

J'ai une question sur la construction de la boucle de Python sous la forme de: pour x dans y: dans mon cas y est une ligne lue à partir d'un fichier et x est des caractères distincts. Je voudrais mettre un espace après chaque paire de caractères de la sortie, comme celui-ci: AA BB CC DD Et, je voudrais donc connaître l'itération actuelle. Est-il possible ou dois-je utiliser un style C plus traditionnel pour boucle avec un index?


0 commentaires

4 Réponses :


23
votes
for i,x in enumerate(y):
    ....

2 commentaires

BTW, est-ce bon style de mettre un espace entre la virgule après que je et x?


Oui, c'est un bon style, mais un espace entre les I et le X.



3
votes

Utiliser énumérer code>: xxx pré>

alternativement, créez simplement une variable et incrémentez-le à l'intérieur du corps de la boucle. Ce n'est pas tout comme «Pythonic», cependant. P>

cur = 0
for x in y:
    cur += 1
    # do stuff, on iteration #cur


4 commentaires

Cur ++ est si inconnu pour donner une erreur de syntaxe, il peut donc être recommandé ;-). Je pense que vous voulez dire cur + = 1 (qui fonctionne au moins, bien qu'il soit grotty lorsqu'il soit comparé à énumérer ;-).


Merci. J'ai fini par utiliser énuméré. Je ne suis pas sûr que cela fait toute autre différence, mais peut-être le comptage manuel est plus clair? Ahem, ok au moins pour quelqu'un qui n'est pas très familier avec Python, en regardant le code.


@ Alex, ouais, je viens de finir d'entrer dans une apte. Donc je suis une sorte de grammée en ce moment. (Et ouais, énumérer est beaucoup plus jolie.)


Si vous êtes préoccupé par une personne inconnue avec Python lisant votre code, vous pouvez toujours ajouter un bref commentaire en ligne expliquant énumérer - mais franchement, si vous nommez vos variables intelligemment, cela devrait être assez intuitif. (Et 'Python Enumérer' est une recherche facile si non!) Je ne m'inquiéterais pas trop.



0
votes

Si ce que vous faites est insérant un espace après chaque paire de caractères, vous pouvez faire quelque chose avec des compromies de liste comme: xxx

sans ajouter l'espace supplémentaire, le dernier caractère de Les lignes avec un nombre impair de caractères seront supprimées; Avec l'espace annexe, des lignes avec un nombre impair de caractères auront un espace supplémentaire à la fin.

(il peut y avoir une façon plus pythonique de le faire que ce que j'ai fait.)


0 commentaires

0
votes

Je ne peux pas vraiment faire une affaire que c'est mieux que la méthode code> énumérer code>, mais il est moins évident pour une personne venant d'un point de vue C, alors je pensais que je le souligne Complétude:

from itertools import izip_longest
' '.join(j + k for j,k in izip_longest(fillvalue='', *([iter(line)]*2)))


0 commentaires