
Wie kann man eigentlich möglichst simpel und elegant über Zeichen iterieren? Zum Beispiel von A-Z? Für Zahlen gibt's "range"...
Eventuell "for char in map(chr, range(65, 91))"?
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

On Mon, 2004-04-26 19:34:52 +0200, Thorsten Kampe wrote:
Wie kann man eigentlich möglichst simpel und elegant über Zeichen iterieren? Zum Beispiel von A-Z? Für Zahlen gibt's "range"...
Eventuell "for char in map(chr, range(65, 91))"?
Viel einfacher :-)
string = "Test" for char in string:
... print char ... T e s t
Wenn du an bestimmte Zeichenmengen denkst:
import string string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.digits
'0123456789'
Der Inhalt von string.letters ist nicht immer derselbe, sondern hängt vom eingestellten Locale ab.
Viele Grüße Stefan
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

* Stefan Schwarzer (2004-04-26 20:20 +0100)
On Mon, 2004-04-26 19:34:52 +0200, Thorsten Kampe wrote:
Wie kann man eigentlich möglichst simpel und elegant über Zeichen iterieren? Zum Beispiel von A-Z? Für Zahlen gibt's "range"...
Eventuell "for char in map(chr, range(65, 91))"?
Viel einfacher :-)
string = "Test" for char in string:
... print char ... T e s t
Wenn du an bestimmte Zeichenmengen denkst:
import string string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
Ja, wie kann ich aber zum Beispiel über c-w iterieren ohne explizit 'cdefghijklmnopqrstuvw' hinzuschreiben? Es geht mir schlicht um das Erzeugen des Strings...
Thorsten
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

On 26 Apr 2004, Thorsten Kampe <- thorsten@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

On Mon, Apr 26, 2004 at 09:27:21PM +0200, Thorsten Kampe wrote:
- Stefan Schwarzer (2004-04-26 20:20 +0100)
[cut]
Ja, wie kann ich aber zum Beispiel über c-w iterieren ohne explizit 'cdefghijklmnopqrstuvw' hinzuschreiben? Es geht mir schlicht um das Erzeugen des Strings...
Hallo Thorsten,
Den String kannst du z.B. so erzeugen: (ohne lambda, Iteratoren und Listcomprehension):
mystring=[] for i in range(ord("c"), ord("z")+1): mystring.append(chr(i)) mystring=''.join(mystring) print mystring
Gruß, Thomas
participants (4)
-
sigurd@12move.de
-
Stefan Schwarzer
-
Thomas Guettler
-
Thorsten Kampe