mehrere replace Aufrufe

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.
Antworten
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Hallo,

gibt es eine einfachere Variante für folgenden Code?

Code: Alles auswählen

return name.replace('(', '\(').replace(')', '\)').replace('/', '_').replace(' ', '_')
in php würde ich es z.B. wie folgt lösen:

Code: Alles auswählen

$search  = array('(',  ')',  '/', ' ');
$replace = array('\(', '\)', '_', '_');
return str_replace($search, $replace, $name); 
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Du könntest aus den alten und neuen Elementen einen Tupel machen und die mit "zip" (oder izip) im einer for-schleife verbinden, und die variable immer wieder neu an sich selbst binden. Dann könntest du die einzelnen Objekte auch leicht übergeben lassen oder als Konstante speichern, ist auch einfach zu ändern. Andere Möglichkeit (und bessere sobald die Struktur erweiterbar sein sollte) wäre ein dict und dessen Methode iteritems().
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Lösungen gibts genug: http://www.python-forum.de/topic-16062.html


btw: Und die Schweine wollen reduce rausschmeißen... ;)
BlackJack

`reduce()` wird nur verlegt, nicht rausgeworfen:

Code: Alles auswählen

Python 3.0b2 (r30b2:65080, Aug 20 2008, 20:41:17)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> reduce
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'reduce' is not defined
>>> from functools import reduce
>>> reduce
<built-in function reduce>
>>>
Also keine Panik. :-)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Code: Alles auswählen

import re

def replace_all(search, replace, s):
    return re.sub("|".join("(%s)" % re.escape(s) for s in search), lambda m: replace[m.lastindex - 1], s)
    
search  = ['a', 'b', 'c']
replace = ['X', 'Y', 'Z']

print replace_all(search, replace, "ich habe")
Stefan
Antworten