String modifizieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Code: Alles auswählen

>>> import re
>>> a = "las|6-1-1643-1438-1"
>>> re.search(r'(?:\d+?-?)+', a).group()
'6-1-1643-1438-1'
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Und ohne re:

Code: Alles auswählen

>>> filter(lambda x: x in '1234567890-', 'las|6-1-1643-1438-1')
'6-1-1643-1438-1'
MfG
HWK
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Darii hat geschrieben:Da Python sowieso schon utopisch langsam ist, macht die Geschwindigkeit aber meist sowieso keinen Unterschied.
Widerspruch!
BlackJack

@numerix: Gegen den Teil vor oder nach dem Komma!? :-)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ohne lambda :)

Code: Alles auswählen

>>> a = "las|6-1-1643-1438-1"
>>> from operator import contains
>>> from string import digits
>>> from functools import partial
>>> filter(partial(contains, digits+'-'), a)
'6-1-1643-1438-1'
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:@numerix: Gegen den Teil vor oder nach dem Komma!? :-)
Das hatte ich extra offen gelassen ...
Gegen den ersten Teil auf jeden Fall. Der 2. Teil ist mir zu unpräzise, als dass ich mich da festlegen wollte.
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

Darii hat geschrieben:reduce hat pro schleifendurchlauf zwangsläufig einen Funktionsaufruf mehr als for. Das macht es zwangsläufig langsamer als for.
Wie bitte? Hast du einen Beleg für die "mehr Funktionsaufrufe"? Ich würde eher sagen, dass die for-Schleife jeden Durchgang einen name lookup mehr machen muss.

Macht man sich mal die Mühe, "a = reduce(f, r)" als for-Schleife zu schreiben, dann kommt da wohl sowas raus wie

Code: Alles auswählen

it = iter(r)
a = next(it)
for b in it:
    a = f(a, b)
Das ist hässlich, nicht schneller, und "leakt" auch noch das b.

Dass reduce in die functools "verbannt" wurde liegt m.W. nicht daran, dass es keine gute Funktionalität hätte, sondern dass es sehr oft unsinnig verwendet wird/wurde, z.B. reduce(lambda x, y: x + y, r).
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

Danke
Antworten