[Python-de] Re: Iterieren über Zeichen

Karl Pflästerer sigurd at 12move.de
Mon Apr 26 22:54:45 CEST 2004


On 26 Apr 2004, Thorsten Kampe <- thorsten at thorstenkampe.de wrote:

> Ja, wie kann ich aber zum Beispiel über c-w iterieren ohne explizit
> 'cdefghijklmnopqrstuvw' hinzuschreiben? Es geht mir schlicht um das
> Erzeugen des Strings...

So jetzt mein zweiter Versuch zu antworten (die erste E-Mail fiel bekam
ich wegen einer hirntoten und sinnfreien SPF Prüfung zurück; I am not
amused).

Nutze doch eine Generatorfunktion (die Alternativen wurden schon
genannt):

def chars (min='A', max='z', step=1):
    if min < max:
        compare=lambda c1, c2: c1 <= c2
        inc=lambda c: chr(ord(c) + step)
    else:
        compare=lambda c1, c2: c1 >= c2
        inc=lambda c: chr(ord(c) - step)
    while compare(min,  max):
        yield min
        min = inc(min)


Nun kannst du, um von c bis w zu iterieren schreiben:

>>> for c in chars('c', 'w'): print c,
... 
c d e f g h i j k l m n o p q r s t u v w
>>> 

Für die umgekehrte Richtung:

>>> for c in chars('w', 'c'): print c,
... 
w v u t s r q p o n m l k j i h g f e d c


Die Schrittweite kannst du auch wählen. Es erscheint etwas overkill,
aber wenn man es mehrmals nutzen muß, hat die klare Schreibweise schon
etwas für sich IMO. Wenn man es nur einmal braucht, ist die map()
Variante oder die entsprechende list comprehension wohl das Mittel der
Wahl. 


ps:
ist die Verwendung von SPF dauerhaft für diese Liste? Es erscheint mir
momentan etwas ähh sch^h^huboptimal.


   Karl
-- 
 `Beware the Jabberwock, my son!
     The jaws that bite, the claws that catch!
  Beware the Jubjub bird, and shun
    The frumious Bandersnatch!'   "Lewis Carroll" "Jabberwocky"