2013-06-18 5 views

Répondre

6
for i in 'cdefg': 

...

for i in (chr(x) for x in range(ord('c'), ord('h'))): 
+0

Vous vouliez dire 'pour x dans ...' dans la deuxième boucle :) –

+1

@SkamahOne: Non, je ne l'ai pas vraiment fait. –

+2

Je pense que 'map (chr, range (...))' est parfaitement adapté, ici: le code serait plus court et aurait moins de parenthèses imbriquées ... Certes, cela crée une liste, en Python 2, mais je suppose que la vitesse est pas important, ici. – EOL

0

Comment cela?

for code in range(ord('c'), ord('h')): 
    print chr(code) 
5

Cela fonctionne aussi, de cette façon son très explicite ce que vous travaillez avec:

import string 
s = string.ascii_lowercase 
for i in s[s.index('c'):s.index('h')]: 
    print i 
8

Je pense qu'il est plus agréable d'ajouter 1-ord('g') que d'utiliser ord('h')

for code in range(ord('c'), ord('g') + 1): 
    print chr(code) 

parce que ce Si vous voulez aller à 'z', vous devez savoir ce qui suit 'z'. Je parie que vous pouvez taper + 1 plus vite que vous pouvez le rechercher.

+1

+1: bon point! – EOL

2

Il n'y a aucune raison de ne pas utiliser:

>>> for char in "cdefg": 
...  print(char) 
c 
d 
e 
f 
g 

Même si vous n'êtes pas un programmeur, vous pouvez comprendre ce que la boucle fait, il est essentiellement en anglais. Il est aussi beaucoup plus propre, il est plus court, et la meilleure partie est qu'il est 6 fois plus rapide que la solution chr(ord()):

>>> import timeit 
>>> timeit.timeit("for i in 'abcdefg': x = i") 
0.27417739599968627 
>>> timeit.timeit("for i in range(ord('a'), ord('g') + 1): x = chr(i)") 
1.7386019650002709 
Questions connexes